// save a single image func handleSaveSingleImage(part *multipart.Part) (info models.ImageInfo, err error) { newID := bson.NewObjectId() date := time.Now().Format("20060102") err = helper.CreateDirIfNotExists(filepath.Join(helper.Config.SaveDir, date)) if err != nil { return } path := filepath.Join(date, newID.Hex()) savePath := filepath.Join(helper.Config.SaveDir, path) dst, err := os.Create(savePath) if err != nil { return } defer dst.Close() var bytes int64 if bytes, err = io.Copy(dst, part); err != nil { return } width, height := helper.GetImageDimensions(savePath) var hash models.HashInfo hash, err = helper.CalculateBasicHashes(savePath) if err != nil { return } URL := helper.Config.BaseURL + "/img/" + newID.Hex() info = models.ImageInfo{ ID: newID, Name: part.FileName(), Extension: filepath.Ext(part.FileName()), Path: path, Width: width, Height: height, URL: URL, Resizes: map[string]string{}, Hash: hash, Size: bytes, CreatedAt: time.Now(), } err = db.StoreImage(&info) if err != nil { return } return info, nil }
// save a single image func handleSaveSingleFile(part *multipart.Part) (info models.FileInfo, err error) { newID := bson.NewObjectId() date := time.Now().Format("20060102") err = helper.CreateDirIfNotExists(filepath.Join(helper.Config.SaveDir, date)) if err != nil { return } path := filepath.Join(date, newID.Hex()) savePath := filepath.Join(helper.Config.SaveDir, path) dst, err := os.Create(savePath) if err != nil { return } defer dst.Close() var bytes int64 if bytes, err = io.Copy(dst, part); err != nil { return } var hash models.HashInfo hash, err = helper.CalculateBasicHashes(savePath) if err != nil { return } URL := helper.Config.BaseURL + "/file/" + newID.Hex() info = models.FileInfo{ ID: newID, Name: part.FileName(), Extension: filepath.Ext(part.FileName()), Path: path, URL: URL, Hash: hash, Size: bytes, CreatedAt: time.Now(), ContentType: getSimpleContentTypeByFileName(part.FileName()), } err = db.StoreResource(&info) if err != nil { return } return info, nil }