فهرست منبع

Merge branch 'v2' of https://git.qianqiusoft.com/qianqiusoft/light-apiengine into v2

huangyh 6 سال پیش
والد
کامیت
1c34f787c9
1فایلهای تغییر یافته به همراه84 افزوده شده و 5 حذف شده
  1. 84 5
      controllers/partial/SysAttachmentController.go

+ 84 - 5
controllers/partial/SysAttachmentController.go

@@ -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
 }