aboutsummaryrefslogtreecommitdiff
path: root/go
diff options
context:
space:
mode:
Diffstat (limited to 'go')
-rw-r--r--go/weed/master.go2
-rw-r--r--go/weed/volume.go55
2 files changed, 31 insertions, 26 deletions
diff --git a/go/weed/master.go b/go/weed/master.go
index 7da7831bf..a37a8df5a 100644
--- a/go/weed/master.go
+++ b/go/weed/master.go
@@ -176,7 +176,7 @@ func volumeStatusHandler(w http.ResponseWriter, r *http.Request) {
}
func redirectHandler(w http.ResponseWriter, r *http.Request) {
- vid, _, _ := parseURLPath(r.URL.Path)
+ vid, _, _, _ := parseURLPath(r.URL.Path)
volumeId, err := storage.NewVolumeId(vid)
if err != nil {
debug("parsing error:", err, r.URL.Path)
diff --git a/go/weed/volume.go b/go/weed/volume.go
index d6c0af123..759200927 100644
--- a/go/weed/volume.go
+++ b/go/weed/volume.go
@@ -112,7 +112,7 @@ func storeHandler(w http.ResponseWriter, r *http.Request) {
}
func GetOrHeadHandler(w http.ResponseWriter, r *http.Request, isGetMethod bool) {
n := new(storage.Needle)
- vid, fid, ext := parseURLPath(r.URL.Path)
+ vid, fid, filename, ext := parseURLPath(r.URL.Path)
volumeId, err := storage.NewVolumeId(vid)
if err != nil {
debug("parsing error:", err, r.URL.Path)
@@ -156,11 +156,11 @@ func GetOrHeadHandler(w http.ResponseWriter, r *http.Request, isGetMethod bool)
}
}
}
- if n.NameSize > 0 {
- fname := string(n.Name)
- dotIndex := strings.LastIndex(fname, ".")
+ if n.NameSize > 0 && filename == "" {
+ filename := string(n.Name)
+ dotIndex := strings.LastIndex(filename, ".")
if dotIndex > 0 {
- ext = fname[dotIndex:]
+ ext = filename[dotIndex:]
}
}
mtype := ""
@@ -173,8 +173,8 @@ func GetOrHeadHandler(w http.ResponseWriter, r *http.Request, isGetMethod bool)
if mtype != "" {
w.Header().Set("Content-Type", mtype)
}
- if n.NameSize > 0 {
- w.Header().Set("Content-Disposition", "filename="+fileNameEscaper.Replace(string(n.Name)))
+ if filename != "" {
+ w.Header().Set("Content-Disposition", "filename="+fileNameEscaper.Replace(filename))
}
if ext != ".gz" {
if n.IsGzipped() {
@@ -200,7 +200,7 @@ func PostHandler(w http.ResponseWriter, r *http.Request) {
writeJsonQuiet(w, r, e)
return
}
- vid, _, _ := parseURLPath(r.URL.Path)
+ vid, _, _, _ := parseURLPath(r.URL.Path)
volumeId, e := storage.NewVolumeId(vid)
if e != nil {
debug("NewVolumeId error:", e)
@@ -229,7 +229,7 @@ func PostHandler(w http.ResponseWriter, r *http.Request) {
}
func DeleteHandler(w http.ResponseWriter, r *http.Request) {
n := new(storage.Needle)
- vid, fid, _ := parseURLPath(r.URL.Path)
+ vid, fid, _, _ := parseURLPath(r.URL.Path)
volumeId, _ := storage.NewVolumeId(vid)
n.ParsePath(fid)
@@ -264,23 +264,28 @@ func DeleteHandler(w http.ResponseWriter, r *http.Request) {
writeJsonQuiet(w, r, m)
}
-func parseURLPath(path string) (vid, fid, ext string) {
-
- sepIndex := strings.LastIndex(path, "/")
- commaIndex := strings.LastIndex(path[sepIndex:], ",")
- if commaIndex <= 0 {
- if "favicon.ico" != path[sepIndex+1:] {
- log.Println("unknown file id", path[sepIndex+1:])
+func parseURLPath(path string) (vid, fid, filename, ext string) {
+ if strings.Count(path, "/") == 3 {
+ parts := strings.Split(path, "/")
+ vid, fid, filename = parts[1], parts[2], parts[3]
+ ext = filename[strings.LastIndex(filename, "."):]
+ } else {
+ sepIndex := strings.LastIndex(path, "/")
+ commaIndex := strings.LastIndex(path[sepIndex:], ",")
+ if commaIndex <= 0 {
+ if "favicon.ico" != path[sepIndex+1:] {
+ log.Println("unknown file id", path[sepIndex+1:])
+ }
+ return
+ }
+ dotIndex := strings.LastIndex(path[sepIndex:], ".")
+ vid = path[sepIndex+1 : commaIndex]
+ fid = path[commaIndex+1:]
+ ext = ""
+ if dotIndex > 0 {
+ fid = path[commaIndex+1 : dotIndex]
+ ext = path[dotIndex:]
}
- return
- }
- dotIndex := strings.LastIndex(path[sepIndex:], ".")
- vid = path[sepIndex+1 : commaIndex]
- fid = path[commaIndex+1:]
- ext = ""
- if dotIndex > 0 {
- fid = path[commaIndex+1 : dotIndex]
- ext = path[dotIndex:]
}
return
}