diff --git a/dbutil/dbutil.go b/dbutil/dbutil.go index ad35c52..754aa9b 100644 --- a/dbutil/dbutil.go +++ b/dbutil/dbutil.go @@ -5,12 +5,41 @@ import ( "github.com/vbatts/imgsrv/types" "labix.org/v2/mgo" "labix.org/v2/mgo/bson" + "strings" ) type Util struct { Gfs *mgo.GridFS } +func (u Util) Create(filename string) (file *mgo.GridFile, err error) { + return u.Gfs.Create(strings.ToLower(filename)) +} + +/* +Find files by their MD5 checksum +*/ +func (u Util) FindFilesByMd5(md5 string) (files []types.File, err error) { + err = u.Gfs.Find(bson.M{"md5": md5}).Sort("-metadata.timestamp").All(&files) + return files, err +} + +/* +match for file name +*/ +func (u Util) FindFilesByName(filename string) (files []types.File, err error) { + err = u.Gfs.Find(bson.M{"filename": filename}).Sort("-metadata.timestamp").All(&files) + return files, err +} + +/* +Case-insensitive pattern match for file name +*/ +func (u Util) FindFilesByPatt(filename_pat string) (files []types.File, err error) { + err = u.Gfs.Find(bson.M{"filename": bson.M{ "$regex": filename_pat, "$options": "i"}}).Sort("-metadata.timestamp").All(&files) + return files, err +} + func (u Util) GetFileByFilename(filename string) (this_file types.File, err error) { err = u.Gfs.Find(bson.M{"filename": filename}).One(&this_file) if err != nil { diff --git a/server.go b/server.go index c849f6a..513d552 100644 --- a/server.go +++ b/server.go @@ -521,8 +521,7 @@ func routeMD5s(w http.ResponseWriter, r *http.Request) { return } - files := []types.File{} - err := gfs.Find(bson.M{"md5": uriChunks[1]}).Sort("-metadata.timestamp").Limit(defaultPageLimit).All(&files) + files, err := du.FindFilesByMd5(uriChunks[1]) if err != nil { serverErr(w, r, err) return @@ -570,8 +569,7 @@ func routeExt(w http.ResponseWriter, r *http.Request) { ext := strings.ToLower(uriChunks[1]) ext_pat := fmt.Sprintf("%s$", ext) - files := []types.File{} - err := gfs.Find(bson.M{"filename": bson.M{ "$regex": ext_pat, "$options": "i"}}).Sort("-metadata.timestamp").All(&files) + files, err := du.FindFilesByPatt(ext_pat) if err != nil { serverErr(w, r, err) return @@ -667,7 +665,7 @@ func routeGetFromUrl(w http.ResponseWriter, r *http.Request) { stored_filename = filepath.Base(local_filename) } - file, err := gfs.Create(strings.ToLower(stored_filename)) + file, err := du.Create(stored_filename) defer file.Close() if err != nil { serverErr(w, r, err) diff --git a/server/server.go b/server/server.go new file mode 100644 index 0000000..a10480a --- /dev/null +++ b/server/server.go @@ -0,0 +1,13 @@ +package server + +import ( + "github.com/gorilla/mux" + "github.com/vbatts/imgsrv/dbutil" +) + +type Web struct { + Router *mux.Router + Store dbutil.Util +} + +