|
|
@@ -1,28 +1,31 @@
|
|
|
-
|
|
|
package partial
|
|
|
|
|
|
import (
|
|
|
- "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
|
|
|
sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
|
|
|
- //sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
|
|
|
- //"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
|
|
|
+ sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
|
|
|
+ syslogs "git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
|
|
|
+ "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+ "errors"
|
|
|
+ "bytes"
|
|
|
+ "path"
|
|
|
+ "mime"
|
|
|
+ "time"
|
|
|
+ "io"
|
|
|
)
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
// _Upload
|
|
|
// @Title _Upload
|
|
|
// @Description 上传文件
|
|
|
// @Success 200 {object} Account
|
|
|
// @Failure 403 :id is empty
|
|
|
func SysAttachment_Upload(c *entitys.CtrlContext) {
|
|
|
-
|
|
|
- ret := __none_func_sys_attachment__()
|
|
|
- if ret {
|
|
|
- c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
|
|
|
- }else{
|
|
|
- c.Ctx.JSON(500, sysmodel.SysReturn{500, "", nil})
|
|
|
+ attach, err := doUpload(c)
|
|
|
+ if err == nil {
|
|
|
+ c.Ctx.JSON(200, sysmodel.SysReturn{200, "", attach.Id})
|
|
|
+ } else {
|
|
|
+ c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -33,14 +36,62 @@ func SysAttachment_Upload(c *entitys.CtrlContext) {
|
|
|
// @Success 200 {object} Account
|
|
|
// @Failure 403 :id is empty
|
|
|
func SysAttachment_Download(c *entitys.CtrlContext) {
|
|
|
- id := c.Ctx.Query("id")
|
|
|
+ attrId := c.Ctx.Query("id")
|
|
|
+ gt := c.Ctx.Query("get_thumb")
|
|
|
+ var attach sysmodel.SysAttachment
|
|
|
+ exist, err := c.Db.SqlMapClient("selectone_sys_attachment", &map[string]interface{}{"id": attrId}).Get(&attach)
|
|
|
+ if !exist && err == nil {
|
|
|
+ err = errors.New("record does not exist")
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ syslogs.Error("获取附件出错了:", err)
|
|
|
+ c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
|
|
|
+ return
|
|
|
+ }
|
|
|
+ durl := attach.Url
|
|
|
+ if gt != "" {
|
|
|
+ durl += "?getthumb=" + gt
|
|
|
+ }
|
|
|
+ resultBody, err := sysutils.GetFile(durl)
|
|
|
+ if err != nil {
|
|
|
+ syslogs.Error("下载附件出错了:", err)
|
|
|
+ c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer resultBody.Close()
|
|
|
+
|
|
|
+ bbuf := bytes.NewBuffer([]byte{})
|
|
|
+
|
|
|
+ c.Ctx.Header("Content-Disposition", "attachment;filename=\""+sysutils.FormatForBrowse(c.Ctx.Request.UserAgent(), attach.Name)+"\"")
|
|
|
+ c.Ctx.Header("Content-Type", strings.Replace(mime.TypeByExtension(attach.Ext), "charset=utf-8", "", -1))
|
|
|
|
|
|
- ret := __none_func_sys_attachment__(id)
|
|
|
- if ret {
|
|
|
- c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
|
|
|
- }else{
|
|
|
- c.Ctx.JSON(500, sysmodel.SysReturn{500, "", nil})
|
|
|
+ buff := make([]byte, 1024)
|
|
|
+ var ssize int64 = 0
|
|
|
+
|
|
|
+ for {
|
|
|
+ n, err := io.ReadFull(resultBody, buff)
|
|
|
+ if err != nil && err != io.ErrUnexpectedEOF && err != io.EOF {
|
|
|
+ syslogs.Error("下载附件出错了:", err)
|
|
|
+ c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if n <= 0 {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ bbuf.Write(buff[:n])
|
|
|
+ ssize += int64(n)
|
|
|
+ }
|
|
|
+
|
|
|
+ c.Ctx.Header("Content-Length", strconv.FormatInt(ssize, 10))
|
|
|
+ _, err = c.Ctx.Writer.Write(bbuf.Bytes())
|
|
|
+ if err != nil {
|
|
|
+ syslogs.Error("输出流断开:", attach.Name, attach.Size)
|
|
|
+ c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
|
|
|
+ return
|
|
|
}
|
|
|
+
|
|
|
+ syslogs.Debug("下载附件成功:", attach.Name, attach.Size)
|
|
|
+ c.Ctx.JSON(200, sysmodel.SysReturn{200, "", attach.Id})
|
|
|
}
|
|
|
|
|
|
// _Delete
|
|
|
@@ -50,17 +101,45 @@ func SysAttachment_Download(c *entitys.CtrlContext) {
|
|
|
// @Success 200 {object} Account
|
|
|
// @Failure 403 :id is empty
|
|
|
func SysAttachment_Delete(c *entitys.CtrlContext) {
|
|
|
- id := c.Ctx.Query("id")
|
|
|
-
|
|
|
- ret := __none_func_sys_attachment__(id)
|
|
|
- if ret {
|
|
|
- c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
|
|
|
- }else{
|
|
|
- c.Ctx.JSON(500, sysmodel.SysReturn{500, "", nil})
|
|
|
+ attrId := c.Ctx.Query("id")
|
|
|
+ attach := &sysmodel.SysAttachment{}
|
|
|
+ attach.Id = attrId
|
|
|
+ _, err := c.Db.Id(attrId).Delete(attach)
|
|
|
+ if err != nil {
|
|
|
+ syslogs.Error("删除附件出错了:", err)
|
|
|
+ c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
|
|
|
+ return
|
|
|
}
|
|
|
+ syslogs.Debug("删除附件:", attrId)
|
|
|
+ c.Ctx.JSON(200, sysmodel.SysReturn{200, "", attrId})
|
|
|
}
|
|
|
|
|
|
+func doUpload(c *entitys.CtrlContext) (*sysmodel.SysAttachment, error) {
|
|
|
+ file, fInfo, err := c.Ctx.Request.FormFile("file")
|
|
|
+ if err != nil {
|
|
|
+ syslogs.Error("上传出错了:", err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ download, hash, length, err := sysutils.PostFile(file)
|
|
|
+
|
|
|
+ attach := &sysmodel.SysAttachment{}
|
|
|
+ attach.Id = sysutils.NewUUID()
|
|
|
+ attach.Name = fInfo.Filename
|
|
|
+ attach.Size = length
|
|
|
+ attach.Url = download
|
|
|
+ attach.CreateTime = time.Now()
|
|
|
+ attach.Ext = path.Ext(attach.Name)
|
|
|
+ attach.Hash = hash
|
|
|
+
|
|
|
+ _, err = c.Db.InsertOne(attach)
|
|
|
+ if err != nil {
|
|
|
+ syslogs.Error("保存附件出错了:", err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return attach, nil
|
|
|
+}
|
|
|
|
|
|
-func __none_func_sys_attachment__(params ... interface{}) bool{
|
|
|
+func __none_func_sys_attachment__(params ... interface{}) bool {
|
|
|
return true
|
|
|
}
|