Ready to add the file downloader.
This commit is contained in:
@ -6,6 +6,9 @@ import (
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
"net/http"
|
||||
"github.com/disintegration/imaging"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
//@Service
|
||||
@ -155,3 +158,97 @@ func (this *MatterService) Upload(file multipart.File, user *User, puuid string,
|
||||
|
||||
return matter
|
||||
}
|
||||
|
||||
//处理图片下载功能。
|
||||
func (this *MatterService) ResizeImage(writer http.ResponseWriter, request *http.Request, matter *Matter, diskFile *os.File) {
|
||||
|
||||
//当前的文件是否是图片,只有图片才能处理。
|
||||
extension := GetExtension(matter.Name)
|
||||
formats := map[string]imaging.Format{
|
||||
".jpg": imaging.JPEG,
|
||||
".jpeg": imaging.JPEG,
|
||||
".png": imaging.PNG,
|
||||
".tif": imaging.TIFF,
|
||||
".tiff": imaging.TIFF,
|
||||
".bmp": imaging.BMP,
|
||||
".gif": imaging.GIF,
|
||||
}
|
||||
|
||||
format, ok := formats[extension]
|
||||
if !ok {
|
||||
panic("该图片格式不支持处理")
|
||||
}
|
||||
|
||||
imageResizeM := request.FormValue("imageResizeM")
|
||||
if imageResizeM == "" {
|
||||
imageResizeM = "fit"
|
||||
} else if imageResizeM != "fit" && imageResizeM != "fill" && imageResizeM != "fixed" {
|
||||
panic("imageResizeM参数错误")
|
||||
}
|
||||
imageResizeWStr := request.FormValue("imageResizeW")
|
||||
var imageResizeW int
|
||||
if imageResizeWStr != "" {
|
||||
imageResizeW, err := strconv.Atoi(imageResizeWStr)
|
||||
this.PanicError(err)
|
||||
if imageResizeW < 1 || imageResizeW > 4096 {
|
||||
panic("缩放尺寸不能超过4096")
|
||||
}
|
||||
}
|
||||
imageResizeHStr := request.FormValue("imageResizeH")
|
||||
var imageResizeH int
|
||||
if imageResizeHStr != "" {
|
||||
imageResizeH, err := strconv.Atoi(imageResizeHStr)
|
||||
this.PanicError(err)
|
||||
if imageResizeH < 1 || imageResizeH > 4096 {
|
||||
panic("缩放尺寸不能超过4096")
|
||||
}
|
||||
}
|
||||
|
||||
//单边缩略
|
||||
if imageResizeM == "fit" {
|
||||
//将图缩略成宽度为100,高度按比例处理。
|
||||
if imageResizeW > 0 {
|
||||
src, err := imaging.Decode(diskFile)
|
||||
this.PanicError(err)
|
||||
dst := imaging.Resize(src, imageResizeW, 0, imaging.Lanczos)
|
||||
|
||||
err = imaging.Encode(writer, dst, format)
|
||||
this.PanicError(err)
|
||||
} else if imageResizeH > 0 {
|
||||
//将图缩略成高度为100,宽度按比例处理。
|
||||
src, err := imaging.Decode(diskFile)
|
||||
this.PanicError(err)
|
||||
dst := imaging.Resize(src, 0, imageResizeH, imaging.Lanczos)
|
||||
|
||||
err = imaging.Encode(writer, dst, format)
|
||||
|
||||
this.PanicError(err)
|
||||
} else {
|
||||
panic("单边缩略必须指定imageResizeW或imageResizeH")
|
||||
}
|
||||
} else if imageResizeM == "fill" {
|
||||
//固定宽高,自动裁剪
|
||||
if imageResizeW > 0 && imageResizeH > 0 {
|
||||
src, err := imaging.Decode(diskFile)
|
||||
this.PanicError(err)
|
||||
dst := imaging.Fill(src, imageResizeW, imageResizeH, imaging.Center, imaging.Lanczos)
|
||||
err = imaging.Encode(writer, dst, format)
|
||||
this.PanicError(err)
|
||||
} else {
|
||||
panic("固定宽高,自动裁剪 必须同时指定imageResizeW和imageResizeH")
|
||||
}
|
||||
} else if imageResizeM == "fixed" {
|
||||
//强制宽高缩略
|
||||
if imageResizeW > 0 && imageResizeH > 0 {
|
||||
src, err := imaging.Decode(diskFile)
|
||||
this.PanicError(err)
|
||||
dst := imaging.Resize(src, imageResizeW, imageResizeH, imaging.Lanczos)
|
||||
|
||||
err = imaging.Encode(writer, dst, format)
|
||||
this.PanicError(err)
|
||||
} else {
|
||||
panic("强制宽高缩略必须同时指定imageResizeW和imageResizeH")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user