|
|
@@ -5,6 +5,8 @@ import (
|
|
|
sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
|
|
|
syslogs "git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
|
|
|
"git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
|
|
|
+ "crypto/sha1"
|
|
|
+ "io/ioutil"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"errors"
|
|
|
@@ -12,7 +14,9 @@ import (
|
|
|
"path"
|
|
|
"mime"
|
|
|
"time"
|
|
|
+ "fmt"
|
|
|
"io"
|
|
|
+ "os"
|
|
|
)
|
|
|
|
|
|
// _Upload
|
|
|
@@ -21,7 +25,7 @@ import (
|
|
|
// @Success 200 {object} Account
|
|
|
// @Failure 403 :id is empty
|
|
|
func SysAttachment_Upload(c *entitys.CtrlContext) {
|
|
|
- attach, err := doUpload(c)
|
|
|
+ attach, err := doUpload2(c)
|
|
|
if err == nil {
|
|
|
c.Ctx.JSON(200, sysmodel.SysReturn{200, "", attach.Id})
|
|
|
syslogs.Debug("上传附件成功:", attach.Name, attach.Size)
|
|
|
@@ -38,7 +42,7 @@ func SysAttachment_Upload(c *entitys.CtrlContext) {
|
|
|
// @Failure 403 :id is empty
|
|
|
func SysAttachment_Download(c *entitys.CtrlContext) {
|
|
|
attrId := c.Ctx.Query("id")
|
|
|
- gt := c.Ctx.Query("get_thumb")
|
|
|
+ //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 {
|
|
|
@@ -49,7 +53,17 @@ func SysAttachment_Download(c *entitys.CtrlContext) {
|
|
|
c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
|
|
|
return
|
|
|
}
|
|
|
- durl := attach.Url
|
|
|
+
|
|
|
+ domain := c.Ctx.GetString("domain")
|
|
|
+ filePath := fmt.Sprintf("files/%s/%s", domain, attach.Id)
|
|
|
+ file, err := os.Open(filePath)
|
|
|
+ if err != nil {
|
|
|
+ c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer file.Close()
|
|
|
+
|
|
|
+ /*durl := attach.Url
|
|
|
if gt != "" {
|
|
|
durl += "?getthumb=" + gt
|
|
|
}
|
|
|
@@ -59,7 +73,7 @@ func SysAttachment_Download(c *entitys.CtrlContext) {
|
|
|
c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
|
|
|
return
|
|
|
}
|
|
|
- defer resultBody.Close()
|
|
|
+ defer resultBody.Close()*/
|
|
|
|
|
|
bbuf := bytes.NewBuffer([]byte{})
|
|
|
|
|
|
@@ -70,7 +84,7 @@ func SysAttachment_Download(c *entitys.CtrlContext) {
|
|
|
var ssize int64 = 0
|
|
|
|
|
|
for {
|
|
|
- n, err := io.ReadFull(resultBody, buff)
|
|
|
+ n, err := io.ReadFull(file, buff)
|
|
|
if err != nil && err != io.ErrUnexpectedEOF && err != io.EOF {
|
|
|
syslogs.Error("下载附件出错了:", err)
|
|
|
c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
|
|
|
@@ -125,12 +139,14 @@ func doUpload(c *entitys.CtrlContext) (*sysmodel.SysAttachment, error) {
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
+ userId := c.Ctx.GetString("user_id")
|
|
|
|
|
|
attach := &sysmodel.SysAttachment{}
|
|
|
attach.Id = sysutils.NewUUID()
|
|
|
attach.Name = fInfo.Filename
|
|
|
attach.Size = length
|
|
|
attach.Url = download
|
|
|
+ attach.CreateBy = userId
|
|
|
attach.CreateTime = time.Now()
|
|
|
attach.Ext = path.Ext(attach.Name)
|
|
|
attach.Hash = hash
|
|
|
@@ -144,6 +160,69 @@ func doUpload(c *entitys.CtrlContext) (*sysmodel.SysAttachment, error) {
|
|
|
return attach, nil
|
|
|
}
|
|
|
|
|
|
+func doUpload2(c *entitys.CtrlContext) (*sysmodel.SysAttachment, error) {
|
|
|
+ file, fInfo, err := c.Ctx.Request.FormFile("file")
|
|
|
+ if err != nil {
|
|
|
+ syslogs.Error("上传出错了:", err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ defer file.Close()
|
|
|
+ domain := c.Ctx.GetString("domain")
|
|
|
+ fileDir := fmt.Sprintf("files/%s/", domain)
|
|
|
+ if err = mkdir(fileDir); err != nil {
|
|
|
+ syslogs.Info("文件夹创建失败")
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ attachId := sysutils.NewUUID()
|
|
|
+ filePath := fileDir + attachId
|
|
|
+ fW, err := os.Create(filePath)
|
|
|
+ if err != nil {
|
|
|
+ syslogs.Info("文件创建失败")
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ defer fW.Close()
|
|
|
+ length, err := io.Copy(fW, file)
|
|
|
+ if err != nil {
|
|
|
+ syslogs.Info("文件保存失败")
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ userId := c.Ctx.GetString("user_id")
|
|
|
+
|
|
|
+ attach := &sysmodel.SysAttachment{}
|
|
|
+ attach.Id = attachId
|
|
|
+ attach.Name = fInfo.Filename
|
|
|
+ attach.Size = int32(length)
|
|
|
+ attach.Url = "/api/v1/sys_attachment/download?id=" + attach.Id
|
|
|
+ attach.CreateBy = userId
|
|
|
+ attach.CreateTime = time.Now()
|
|
|
+ attach.Ext = path.Ext(attach.Name)
|
|
|
+ attach.Hash = FileHasH(filePath)
|
|
|
+
|
|
|
+ _, err = c.Db.InsertOne(attach)
|
|
|
+ if err != nil {
|
|
|
+ syslogs.Error("保存附件出错了:", err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return attach, nil
|
|
|
+}
|
|
|
+
|
|
|
+func mkdir(dir string) error {
|
|
|
+ _, err := os.Stat(dir)
|
|
|
+ if err != nil {
|
|
|
+ err = os.MkdirAll(dir, os.ModePerm)
|
|
|
+ }
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+func FileHasH(filePath string) string {
|
|
|
+ bytes, err := ioutil.ReadFile(filePath)
|
|
|
+ if err == nil && len(bytes) > 0 {
|
|
|
+ return fmt.Sprintf("%x", sha1.Sum(bytes))
|
|
|
+ }
|
|
|
+ return ""
|
|
|
+}
|
|
|
+
|
|
|
func __none_func_sys_attachment__(params ... interface{}) bool {
|
|
|
return true
|
|
|
}
|