commit
continuous-integration/drone/push Build is passing Details

master
黄海 4 years ago
parent a18d7392c5
commit 279a56db60

@ -5,7 +5,11 @@
</component>
<component name="ChangeListManager">
<list default="true" id="19c8c37d-a056-451c-a29d-fb612b9a3e2f" name="Default Changelist" comment="commit">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Business/FileRelate/FileRelateController/FileReleateController.go" beforeDir="false" afterPath="$PROJECT_DIR$/Business/FileRelate/FileRelateController/FileReleateController.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Business/FileRelate/FileRelateDao/FileReleateDao.go" beforeDir="false" afterPath="$PROJECT_DIR$/Business/FileRelate/FileRelateDao/FileReleateDao.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Business/ImRelate/ImRelateController/ImRelateController.go" beforeDir="false" afterPath="$PROJECT_DIR$/Business/ImRelate/ImRelateController/ImRelateController.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Router/Router.go" beforeDir="false" afterPath="$PROJECT_DIR$/Router/Router.go" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -23,6 +27,14 @@
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
</component>
<component name="GitSEFilterConfiguration">
<file-type-list>
<filtered-out-file-type name="LOCAL_BRANCH" />
<filtered-out-file-type name="REMOTE_BRANCH" />
<filtered-out-file-type name="TAG" />
<filtered-out-file-type name="COMMIT_BY_MESSAGE" />
</file-type-list>
</component>
<component name="GoLibraries">
<option name="indexEntireGoPath" value="false" />
</component>
@ -46,6 +58,10 @@
<property name="go.sdk.automatically.set" value="true" />
<property name="go.tried.to.enable.integration.vgo.integrator" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="node.js.detected.package.eslint" value="true" />
<property name="node.js.detected.package.tslint" value="true" />
<property name="node.js.selected.package.eslint" value="(autodetect)" />
<property name="node.js.selected.package.tslint" value="(autodetect)" />
<property name="settings.editor.selected.configurable" value="preferences.keymap" />
</component>
<component name="RecentsManager">

@ -1 +1,138 @@
package FileRelateController
import (
"bytes"
"dsSzxy/Business/FileRelate/FileRelateDao"
"dsSzxy/Utils/CommonUtil"
"dsSzxy/Utils/ConfigUtil"
"dsSzxy/Utils/MinioUtil"
"encoding/base64"
"fmt"
"github.com/disintegration/imaging"
"github.com/gin-gonic/gin"
"github.com/minio/minio-go/v6"
"io/ioutil"
"log"
"net/http"
"os"
"strings"
)
// Routers 模块的路由配置
func Routers(r *gin.RouterGroup) {
rr := r.Group("/fileRelate")
//文件表
rr.POST("/fileUpload", fileUpload)
//rr.POST("/fileRecord", fileRecord)
//rr.POST("/fileUpdate", fileUpdate)
//rr.POST("/fileCopy", fileCopy)
//树型结构
}
//文件上传
func fileUpload(c *gin.Context) {
file, err := c.FormFile("file")
if err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error()))
return
}
//扩展名
ext := CommonUtil.Ext(file.Filename)
ext = strings.ToLower(ext)
//真实文件名
uuid := CommonUtil.GetUUID()
//子目录
p := ConfigUtil.SavePath + uuid[0:2]
exist := CommonUtil.Exists(p)
if !exist {
os.Mkdir(p, os.ModePerm)
}
trueName := uuid + ext
filename := p + "/" + trueName
if err := c.SaveUploadedFile(file, filename); err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error()))
return
}
//文件大小
content, err := ioutil.ReadFile(filename)
if err == nil {
fmt.Println("file size is ", len(content))
}
size := len(content)
// 初使化 minio client对象。
minioClient, err := MinioUtil.GetMinioClient()
if err != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "info": "minio无法连接"})
return
}
// 使用FPutObject上传一个zip文件。
contentType := "application/octet-stream"
_, err = minioClient.FPutObject(ConfigUtil.MinioBucket, trueName[0:2]+"/"+trueName, filename, minio.PutObjectOptions{ContentType: contentType})
if err != nil {
log.Fatalln(err)
}
//记录数据库
identityId := CommonUtil.ConvertStringToInt32(c.PostForm("identity_id"))
personId := CommonUtil.ConvertStringToInt32(c.PostForm("person_id"))
targetGroupId := CommonUtil.ConvertStringToInt32(c.PostForm("target_group_id"))
targetIdentityId := CommonUtil.ConvertStringToInt32(c.PostForm("target_identity_id"))
targetPersonId := CommonUtil.ConvertStringToInt32(c.PostForm("target_person_id"))
systemId := CommonUtil.ConvertStringToInt32(c.PostForm("system_id"))
FileRelateDao.FileRecord(filename, identityId, personId, targetGroupId, targetIdentityId, targetPersonId, systemId, int32(size), ext)
//返回
s := FileRelateDao.GetFileDownLoadUrl(trueName[0:2]+"/"+trueName, file.Filename)
originUrl := ConfigUtil.MinioDownloadPrefix + ConfigUtil.MinioBucket + "/" + trueName[0:2] + "/" + trueName
//判断扩展名是不是图片
if ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp" {
//读取本地文件
imgData, _ := ioutil.ReadFile(filename)
buf := bytes.NewBuffer(imgData)
image, err := imaging.Decode(buf)
if err != nil {
fmt.Println(err)
return
}
//生成缩略图
image = imaging.Resize(image, 0, 150, imaging.Lanczos)
thumbFileName := uuid + "_thumb" + ext
thumbTrueName := p + "/" + thumbFileName
err = imaging.Save(image, thumbTrueName)
if err != nil {
fmt.Println(err)
}
//读入生成图片的base64编码
ff, _ := os.Open(thumbTrueName)
defer ff.Close()
sourceBuffer := make([]byte, 500000)
n, _ := ff.Read(sourceBuffer)
//base64压缩
sourceString := base64.StdEncoding.EncodeToString(sourceBuffer[:n])
//删除原始文件
os.Remove(filename)
//删除缩略图文件
os.Remove(thumbTrueName)
c.JSON(200, gin.H{
"success": true,
"originUrl": originUrl,
"url": s,
"thumbContent": sourceString,
"size": size,
})
} else {
//删除原始文件
os.Remove(filename)
c.JSON(200, gin.H{
"success": true,
"url": s,
"size": size,
})
}
}

@ -1 +1,62 @@
package FileRelateDao
import (
"dsSzxy/Utils/CommonUtil"
"dsSzxy/Utils/ConfigUtil"
"dsSzxy/Utils/DbUtil"
"dsSzxy/models"
"errors"
"net/url"
"time"
)
var db = DbUtil.Engine
/**
*/
func GetFileDownLoadUrl(key string, originName string) string {
infix := "?response-content-disposition=attachment%3BfileName%2A%3DUTF-8%27%27"
downloadUrl := ConfigUtil.MinioDownloadPrefix + ConfigUtil.MinioBucket + "/" + key + infix + url.QueryEscape(url.QueryEscape(originName))
return downloadUrl
}
//文件记录
func FileRecord(fileName string, indentityId int32, personId int32, targetGroupId int32, tIdentityId int32, tPersonId int32, systemId int32, fileSize int32, extName string) {
var model models.TZhxyFile
model.FileId = CommonUtil.GetUUID()
model.FileName = fileName
model.FileSize = fileSize
model.BaseId = "-1"
model.BUse = 1
model.ExtName = extName
model.SystemId = systemId
model.TargetGroupId = targetGroupId
model.TargetIdentityId = tIdentityId
model.TargetPersonId = tPersonId
model.UploadIndentityId = indentityId
model.UploadPersonId = personId
model.UploadTime = time.Now()
c, err := GetFileTypeByExtName(extName)
if err == nil {
model.TypeId = c
} else {
model.TypeId = 0
}
db.Insert(model)
}
/**
ID
*/
func GetFileTypeByExtName(extName string) (int32, error) {
sql := "select type_id from t_zhxy_file_type_ext where ext_name=?"
res, err := DbUtil.Engine.SQL(sql, extName).Query().List()
if err != nil {
return -1, errors.New("查询SQL语句失败")
}
if len(res) == 0 {
return 0, nil
}
return res[0]["type_id"].(int32), nil
}

@ -1,135 +1,11 @@
package ImRelateController
import (
"bytes"
"dsSzxy/Utils/CommonUtil"
"dsSzxy/Utils/ConfigUtil"
"dsSzxy/Utils/MinioUtil"
"encoding/base64"
"fmt"
"github.com/disintegration/imaging"
"github.com/gin-gonic/gin"
"github.com/minio/minio-go/v6"
"io/ioutil"
"log"
"net/http"
"net/url"
"os"
"strings"
)
//模块的路由配置
func Routers(r *gin.RouterGroup) {
rr := r.Group("/imRelate")
rr.POST("/fileUpload", fileUpload)
}
//聊天中的文件上传
func fileUpload(c *gin.Context) {
file, err := c.FormFile("file")
if err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error()))
return
}
//扩展名
ext := CommonUtil.Ext(file.Filename)
ext = strings.ToLower(ext)
//真实文件名
uuid := CommonUtil.GetUUID()
//子目录
p := ConfigUtil.SavePath + uuid[0:2]
exist := CommonUtil.Exists(p)
if !exist {
os.Mkdir(p, os.ModePerm)
}
trueName := uuid + ext
filename := p + "/" + trueName
if err := c.SaveUploadedFile(file, filename); err != nil {
c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error()))
return
}
//文件大小
content, err := ioutil.ReadFile(filename)
if err == nil {
fmt.Println("file size is ", len(content))
}
size := len(content)
// 初使化 minio client对象。
minioClient, err := MinioUtil.GetMinioClient()
if err != nil {
c.JSON(http.StatusOK, gin.H{"success": false, "info": "minio无法连接"})
return
}
// 使用FPutObject上传一个zip文件。
contentType := "application/octet-stream"
_, err = minioClient.FPutObject(ConfigUtil.MinioBucket, trueName[0:2]+"/"+trueName, filename, minio.PutObjectOptions{ContentType: contentType})
if err != nil {
log.Fatalln(err)
}
//返回
s := getFileDownLoadUrl(trueName[0:2]+"/"+trueName, file.Filename)
originUrl := ConfigUtil.MinioDownloadPrefix + ConfigUtil.MinioBucket + "/" + trueName[0:2] + "/" + trueName
//判断扩展名是不是图片
if ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp" {
//读取本地文件
imgData, _ := ioutil.ReadFile(filename)
buf := bytes.NewBuffer(imgData)
image, err := imaging.Decode(buf)
if err != nil {
fmt.Println(err)
return
}
//生成缩略图
image = imaging.Resize(image, 0, 150, imaging.Lanczos)
thumbFileName := uuid + "_thumb" + ext
thumbTrueName := p + "/" + thumbFileName
err = imaging.Save(image, thumbTrueName)
if err != nil {
fmt.Println(err)
}
//读入生成图片的base64编码
ff, _ := os.Open(thumbTrueName)
defer ff.Close()
sourceBuffer := make([]byte, 500000)
n, _ := ff.Read(sourceBuffer)
//base64压缩
sourceString := base64.StdEncoding.EncodeToString(sourceBuffer[:n])
//删除原始文件
os.Remove(filename)
//删除缩略图文件
os.Remove(thumbTrueName)
c.JSON(200, gin.H{
"success": true,
"originUrl": originUrl,
"url": s,
"thumbContent": sourceString,
"size": size,
})
} else {
//删除原始文件
os.Remove(filename)
c.JSON(200, gin.H{
"success": true,
"url": s,
"size": size,
})
}
}
/**
*/
func getFileDownLoadUrl(key string, originName string) string {
infix := "?response-content-disposition=attachment%3BfileName%2A%3DUTF-8%27%27"
downloadUrl := ConfigUtil.MinioDownloadPrefix + ConfigUtil.MinioBucket + "/" + key + infix + url.QueryEscape(url.QueryEscape(originName))
return downloadUrl
//rr := r.Group("/imRelate")
//rr.POST("/fileUpload", fileUpload)
}

@ -2,6 +2,7 @@ package Router
import (
"dsSzxy/Business/CaptchaRelate/CaptchaController"
"dsSzxy/Business/FileRelate/FileRelateController"
"dsSzxy/Business/ImRelate/ImRelateController"
"dsSzxy/Business/MinIORelate/MinIORelateController"
"github.com/gin-gonic/gin"
@ -17,8 +18,6 @@ func GinRouter(r *gin.Engine) {
ImRelateController.Routers(rr)
//Captcha
CaptchaController.Routers(rr)
//文件
FileRelateController.Routers(rr)
}

Loading…
Cancel
Save