houyaf hace 3 años
padre
commit
6c0962bb3f
Se han modificado 5 ficheros con 71 adiciones y 21 borrados
  1. 1 0
      .gitignore
  2. 3 5
      cmd/file_server/minio.go
  3. 1 0
      cmd/job/init.go
  4. 12 12
      go.mod
  5. 54 4
      pkg/system/controller/upload_controller.go

+ 1 - 0
.gitignore

@@ -8,3 +8,4 @@
 /public/
 /web/public/
 /logs/
+/cmd/main/public/

+ 3 - 5
cmd/file_server/minio.go

@@ -19,7 +19,7 @@ type MinioConfig struct {
 }
 
 var defaultConfig = &MinioConfig{
-	EndPoint:  "http://114.116.19.14:9000",
+	EndPoint:  "114.116.19.14:9000",
 	AccessKey: "root",
 	SecretKey: "Houyaf1!",
 	UseSSL:    false,
@@ -138,7 +138,7 @@ func (m *MinioServe) uploadFile(objectName, filePath string) (*DestFile, error)
 	}
 
 	fileExt := path.Ext(objectName)
-	url := fmt.Sprintf("%s/%s/%s", defaultConfig.EndPoint, defaultFileBucket, objectName)
+	url := fmt.Sprintf("http://%s/%s/%s", defaultConfig.EndPoint, defaultFileBucket, objectName)
 	targetFile := &DestFile{
 		FileName:     objectName,
 		FileUrl:      url,
@@ -170,7 +170,5 @@ func UploadFileToMinio(fileName, filePath string) (*DestFile, error) {
 		releaseMinioServer(m)
 	}()
 	m.Client = client
-	objName := ""
-
-	return m.uploadFile(objName, filePath)
+	return m.uploadFile(fileName, filePath)
 }

+ 1 - 0
cmd/job/init.go

@@ -0,0 +1 @@
+package job

+ 12 - 12
go.mod

@@ -6,8 +6,10 @@ require (
 	github.com/go-playground/validator/v10 v10.11.2
 	github.com/go-redis/redis/v8 v8.11.5
 	github.com/go-sql-driver/mysql v1.7.0
-	github.com/iris-contrib/middleware/cors v0.0.0-20230311205048-b568fe9b470f
+	github.com/iris-contrib/go.uuid v2.0.0+incompatible
+	github.com/iris-contrib/middleware/cors v0.0.0-20230429193704-33473bd2dc16
 	github.com/kataras/iris/v12 v12.2.0
+	github.com/minio/minio-go/v7 v7.0.54
 	github.com/stretchr/objx v0.5.0
 	xorm.io/core v0.7.3
 	xorm.io/xorm v1.3.2
@@ -22,7 +24,7 @@ require (
 	github.com/andybalholm/brotli v1.0.5 // indirect
 	github.com/aymerick/douceur v0.2.0 // indirect
 	github.com/blang/semver/v4 v4.0.0 // indirect
-	github.com/cespare/xxhash/v2 v2.2.0 // indirect
+	github.com/cespare/xxhash/v2 v2.1.2 // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/dustin/go-humanize v1.0.1 // indirect
 	github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 // indirect
@@ -38,7 +40,6 @@ require (
 	github.com/google/uuid v1.3.0 // indirect
 	github.com/gorilla/css v1.0.0 // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
-	github.com/iris-contrib/go.uuid v2.0.0+incompatible // indirect
 	github.com/iris-contrib/schema v0.0.6 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
@@ -49,7 +50,7 @@ require (
 	github.com/kataras/pio v0.0.11 // indirect
 	github.com/kataras/sitemap v0.0.6 // indirect
 	github.com/kataras/tunnel v0.0.4 // indirect
-	github.com/klauspost/compress v1.16.3 // indirect
+	github.com/klauspost/compress v1.16.5 // indirect
 	github.com/klauspost/cpuid/v2 v2.2.4 // indirect
 	github.com/leodido/go-urn v1.2.2 // indirect
 	github.com/mailgun/raymond/v2 v2.0.48 // indirect
@@ -57,17 +58,16 @@ require (
 	github.com/mediocregopher/radix/v3 v3.8.1 // indirect
 	github.com/microcosm-cc/bluemonday v1.0.23 // indirect
 	github.com/minio/md5-simd v1.1.2 // indirect
-	github.com/minio/minio-go/v7 v7.0.52 // indirect
-	github.com/minio/sha256-simd v1.0.0 // indirect
+	github.com/minio/sha256-simd v1.0.1 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/nats-io/nats.go v1.23.0 // indirect
 	github.com/nats-io/nkeys v0.3.0 // indirect
 	github.com/nats-io/nuid v1.0.1 // indirect
-	github.com/rs/xid v1.4.0 // indirect
+	github.com/rs/xid v1.5.0 // indirect
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
 	github.com/schollz/closestmatch v2.1.0+incompatible // indirect
-	github.com/sirupsen/logrus v1.9.0 // indirect
+	github.com/sirupsen/logrus v1.9.2 // indirect
 	github.com/syndtr/goleveldb v1.0.0 // indirect
 	github.com/tdewolff/minify/v2 v2.12.5 // indirect
 	github.com/tdewolff/parse/v2 v2.6.5 // indirect
@@ -75,10 +75,10 @@ require (
 	github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect
 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
 	github.com/yosssi/ace v0.0.5 // indirect
-	golang.org/x/crypto v0.7.0 // indirect
-	golang.org/x/net v0.8.0 // indirect
-	golang.org/x/sys v0.6.0 // indirect
-	golang.org/x/text v0.8.0 // indirect
+	golang.org/x/crypto v0.9.0 // indirect
+	golang.org/x/net v0.10.0 // indirect
+	golang.org/x/sys v0.8.0 // indirect
+	golang.org/x/text v0.9.0 // indirect
 	golang.org/x/time v0.3.0 // indirect
 	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
 	google.golang.org/protobuf v1.30.0 // indirect

+ 54 - 4
pkg/system/controller/upload_controller.go

@@ -1,14 +1,25 @@
 package controller
 
 import (
+	uuid "github.com/iris-contrib/go.uuid"
 	"github.com/kataras/iris/v12/mvc"
+	"io"
 	"mime/multipart"
+	"os"
 	"path/filepath"
+	"strings"
+	"time"
 	"xps/cmd/constant"
 	"xps/pkg/system/service"
 	"xps/pkg/utils"
 )
 
+// client version and secret, it should be from client side
+const (
+	UploadDir string = "E:/dev-x/xps-server-g5/cmd/main/public/upload/"
+	UrlBase   string = "/upload/"
+)
+
 type FileData struct {
 	FileInfo *multipart.FileHeader
 	FileData *multipart.File
@@ -34,16 +45,25 @@ func (c *UploadController) UploadFile() *JsonResult {
 	}
 	defer f.Close()
 
-	_, err = c.Ctx.SaveFormFile(fh, filepath.Join("./public/uploads/temp", fh.Filename))
+	oldFileName := fh.Filename
+	targetFileName := c.GenerateNewFileName(oldFileName)
+
+	out, err := os.OpenFile(targetFileName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)
+	if err != nil {
+		return ResultErr(err.Error(), nil)
+	}
+
+	defer out.Close()
+	_, err = io.Copy(out, f)
 	if err != nil {
 		return ResultErr(err.Error(), nil)
 	}
 
-	fileFullPath := filepath.Join("./public/uploads/temp/", fh.Filename)
 	targetFile := service.TargetFile{
-		FileName: fh.Filename,
-		FilePath: fileFullPath,
+		FileName: oldFileName,
+		FilePath: targetFileName,
 	}
+
 	file, err := c.Service.UploadFile(ocId, userId, constant.DOC_DIR_TEMP, targetFile)
 	if err != nil {
 		return ResultErr(err.Error(), nil)
@@ -61,3 +81,33 @@ func (c *UploadController) UploadFiles() *JsonResult {
 		return ResultOk("获取成功", files)
 	}
 }
+
+// CreateDateDir Create date directory
+func (c *UploadController) CreateDateDir() (srcPath string) {
+	folderName := time.Now().Format("20060102")
+	// curPath, _ := os.Getwd()
+	src := filepath.Join(UploadDir, folderName)
+	_, err := os.Stat(srcPath)
+	if os.IsNotExist(err) {
+		_ = os.Mkdir(src, os.ModePerm)
+		_ = os.Chmod(src, os.ModePerm)
+	}
+
+	return src
+}
+
+// GenerateNewFileName Generate new file name
+func (c *UploadController) GenerateNewFileName(oldFileName string) (srcPath string) {
+	u1, _ := uuid.NewV4()
+	newFileName := u1.String()
+	src := c.CreateDateDir()
+
+	dotIndex := strings.LastIndex(oldFileName, ".")
+	if dotIndex != -1 && dotIndex != 0 {
+		newFileName += oldFileName[dotIndex:]
+	}
+
+	src = filepath.Join(src, newFileName)
+
+	return src
+}