diff --git a/weed/server/filer_server_handlers_read.go b/weed/server/filer_server_handlers_read.go index bf95e37b9..6c71c475e 100644 --- a/weed/server/filer_server_handlers_read.go +++ b/weed/server/filer_server_handlers_read.go @@ -87,11 +87,24 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request, return } - fileId, err := fs.filer.FindFile(r.URL.Path) + reqUrl := r.URL.RequestURI() + if r.FormValue("w") != "" || r.FormValue("h") != "" || r.FormValue("r") != "" { + reqUrl = r.URL.Path + "?w=" + r.FormValue("w") + "&h=" + r.FormValue("h") + "&r=" + r.FormValue("r") + } + fileId, err := fs.filer.FindFile(reqUrl) if err == filer.ErrNotFound { - glog.V(3).Infoln("Not found in db", r.URL.Path) - w.WriteHeader(http.StatusNotFound) - return + glog.V(0).Infoln(reqUrl, "not exist") + r.Header.Add("exist", "0") + r.Header.Add("path", r.URL.Path) + fileId, err = fs.filer.FindFile(r.URL.Path) + if err == filer.ErrNotFound { + glog.V(3).Infoln("Not found in db", r.URL.Path) + w.WriteHeader(http.StatusNotFound) + return + } + } else { + glog.V(0).Infoln(reqUrl, "exist") + r.Header.Add("exist", "1") } urlLocation, err := operation.LookupFileId(fs.getMasterNode(), fileId) diff --git a/weed/server/filer_server_handlers_write.go b/weed/server/filer_server_handlers_write.go index 464cb81ef..f544c8241 100644 --- a/weed/server/filer_server_handlers_write.go +++ b/weed/server/filer_server_handlers_write.go @@ -298,7 +298,7 @@ func (fs *FilerServer) PostHandler(w http.ResponseWriter, r *http.Request) { writeJsonError(w, r, http.StatusInternalServerError, errors.New(ret.Error)) return } - path := r.URL.Path + path := r.URL.RequestURI() if strings.HasSuffix(path, "/") { if ret.Name != "" { path += ret.Name diff --git a/weed/server/volume_server_handlers_read.go b/weed/server/volume_server_handlers_read.go index cdc88d442..97f9eec5d 100644 --- a/weed/server/volume_server_handlers_read.go +++ b/weed/server/volume_server_handlers_read.go @@ -15,6 +15,7 @@ import ( "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/images" "github.com/chrislusf/seaweedfs/weed/operation" + "github.com/chrislusf/seaweedfs/weed/security" "github.com/chrislusf/seaweedfs/weed/storage" "github.com/chrislusf/seaweedfs/weed/util" ) @@ -123,20 +124,31 @@ func (vs *VolumeServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request) } } } + if ext == ".png" || ext == ".jpg" || ext == ".gif" { - width, height := 0, 0 - if r.FormValue("width") != "" { - width, _ = strconv.Atoi(r.FormValue("width")) + width, height, rotate := 0, 0, 0 + if r.FormValue("w") != "" { + width, _ = strconv.Atoi(r.FormValue("w")) } - if r.FormValue("height") != "" { - height, _ = strconv.Atoi(r.FormValue("height")) + if r.FormValue("h") != "" { + height, _ = strconv.Atoi(r.FormValue("h")) } - n.Data, _, _ = images.Resized(ext, n.Data, width, height) - - //旋转 if r.FormValue("rotate") != "" { - rotate, _ := strconv.Atoi(r.FormValue("rotate")) + rotate, _ = strconv.Atoi(r.FormValue("r")) + } + + //缓存 + if r.Header.Get("exist") != "1" && (r.FormValue("w") != "" || r.FormValue("h") != "" || r.FormValue("r") != "") { + glog.V(0).Infoln("生成") + n.Data, _, _ = images.Resized(ext, n.Data, width, height) n.Data = images.Rotate(ext, n.Data, rotate) + + reqUrl := r.Header.Get("path") + "?w=" + r.FormValue("w") + "&h=" + r.FormValue("h") + "&r=" + r.FormValue("r") + jwt := security.GetJwt(r) + _, err = operation.Upload("http://localhost:8888"+reqUrl, filename, bytes.NewReader(n.Data), false, "image/jpeg", jwt) + if err != nil { + glog.V(0).Infoln(err) + } } } diff --git a/weed/weed b/weed/weed index 10e161173..57dd66628 100755 Binary files a/weed/weed and b/weed/weed differ