Example #1
0
// delete image
func (this *FileService) DeleteImage(userId, fileId string) (bool, string) {
	file := info.File{}
	db.GetByIdAndUserId(db.Files, fileId, userId, &file)

	if file.FileId != "" {
		if db.DeleteByIdAndUserId(db.Files, fileId, userId) {
			// delete image
			// TODO
			file.Path = strings.TrimLeft(file.Path, "/")
			var err error
			//modified by JacobXie
			if qiniuService.IsUseQiniu() {
				err = qiniuService.DeleteOnQiniu(file.Path)
			} else {

				if strings.HasPrefix(file.Path, "upload") {
					Log(file.Path)
					err = os.Remove(revel.BasePath + "/public/" + file.Path)
				} else {
					err = os.Remove(revel.BasePath + "/" + file.Path)
				}
			}
			if err == nil {
				return true, ""
			}
			return false, "delete file error!"
		}
		return false, "db error"
	}
	return false, "no such item"
}
// 上传图片, 公用方法
// upload image common func
func (c File) uploadImage(from, albumId string) (re info.Re) {
	var fileUrlPath = ""
	var fileId = ""
	var resultCode = 0      // 1表示正常
	var resultMsg = "error" // 错误信息
	var Ok = false

	defer func() {
		re.Id = fileId // 只是id, 没有其它信息
		re.Code = resultCode
		re.Msg = resultMsg
		re.Ok = Ok
		L("fileID : " + re.Id)
		L("Msg : " + re.Msg)

	}()

	file, handel, err := c.Request.FormFile("file")
	if err != nil {
		return re
	}
	defer file.Close()

	// 生成上传路径
	newGuid := NewGuid()

	userId := c.GetUserId()

	if from == "logo" || from == "blogLogo" {
		fileUrlPath = "public/upload/" + Digest3(userId) + "/" + userId + "/images/logo"
	} else {
		fileUrlPath = "files/" + Digest3(userId) + "/" + userId + "/" + Digest2(newGuid) + "/images"
	}

	// 生成新的文件名
	filename := handel.Filename

	var ext string
	if from == "pasteImage" {
		ext = ".png" // TODO 可能不是png类型
	} else {
		_, ext = SplitFilename(filename)
		if ext != ".gif" && ext != ".jpg" && ext != ".png" && ext != ".bmp" && ext != ".jpeg" {
			resultMsg = "Please upload image"
			return re
		}
	}

	filename = newGuid + ext
	//判断文件大小

	var maxFileSize float64
	if from == "logo" {
		maxFileSize = configService.GetUploadSize("uploadAvatarSize")
	} else if from == "blogLogo" {
		maxFileSize = configService.GetUploadSize("uploadBlogLogoSize")
	} else {
		maxFileSize = configService.GetUploadSize("uploadImageSize")
	}
	if maxFileSize <= 0 {
		maxFileSize = 1000
	}

	//filesize = int64(len(data))
	//modified by JacobXie
	var filesize int64
	// 获取文件大小的接口
	type Sizer interface {
		Size() int64
	}

	if sizeInterface, ok := file.(Sizer); ok {
		filesize = sizeInterface.Size()
	}
	// > 2M?
	if float64(filesize) > maxFileSize*float64(1024*1024) {
		resultCode = 0
		resultMsg = fmt.Sprintf("The file Size is bigger than %vM", maxFileSize)
		return re
	}

	//modified by JacobXie
	if qiniuService.IsUseQiniu() {
		toPath := fileUrlPath + "/" + filename
		err := qiniuService.Upload2Qiniu(toPath, file, filesize)
		if err != nil {
			LogJ(err)
			return re
		}
	} else {
		data, err := ioutil.ReadAll(file)
		if err != nil {
			LogJ(err)
			return re
		}

		dir := revel.BasePath + "/" + fileUrlPath
		err = os.MkdirAll(dir, 0755)
		if err != nil {
			return re
		}

		toPath := dir + "/" + filename
		err = ioutil.WriteFile(toPath, data, 0777)
		if err != nil {
			LogJ(err)
			return re
		}
		// 改变成gif图片
		_, toPathGif := TransToGif(toPath, 0, true)
		filename = GetFilename(toPathGif)
		filesize = GetFilesize(toPathGif)
	}

	fileUrlPath += "/" + filename
	resultCode = 1
	resultMsg = "Upload Success!"

	// File
	fileInfo := info.File{Name: filename,
		Title: handel.Filename,
		Path:  fileUrlPath,
		Size:  filesize}

	id := bson.NewObjectId()
	fileInfo.FileId = id
	fileId = id.Hex()

	if from == "logo" || from == "blogLogo" {
		if qiniuService.IsUseQiniu() {
			fileId = qiniuService.GetUrlOnQiniu(fileUrlPath)
		} else {
			fileId = fileUrlPath
		}
	}

	Ok, resultMsg = fileService.AddImage(fileInfo, albumId, c.GetUserId(), from == "" || from == "pasteImage")
	resultMsg = c.Message(resultMsg)

	fileInfo.Path = "" // 不要返回
	re.Item = fileInfo
	return re
}