1、修改文件上传
This commit is contained in:
		
							parent
							
								
									93405fe90a
								
							
						
					
					
						commit
						62b6338613
					
				|  | @ -20,6 +20,7 @@ minio: | |||
|   endpoint: 127.0.0.1:9000 | ||||
|   accessKeyId: root | ||||
|   secretAccessKey: OIxv7QptYBO3 | ||||
|   bucket: jky-data | ||||
| consul: | ||||
|   host: http://consul.hpds.cc | ||||
|   port: 80 | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ import ( | |||
| 	"hpds-iot-web/internal/service" | ||||
| 	"hpds-iot-web/model" | ||||
| 	e "hpds-iot-web/pkg/err" | ||||
| 	"strconv" | ||||
| ) | ||||
| 
 | ||||
| func (s HandlerService) UploadFile(c *gin.Context) (data interface{}, err error) { | ||||
|  | @ -20,14 +21,17 @@ func (s HandlerService) UploadFile(c *gin.Context) (data interface{}, err error) | |||
| 		return nil, e.NewValidErr(err) | ||||
| 	} | ||||
| 	files := form.File["file"] | ||||
| 	scene := c.GetString("scene") | ||||
| 	val := form.Value["scene"] | ||||
| 	scene := val[0] | ||||
| 	if len(scene) < 1 { | ||||
| 		scene = "other" | ||||
| 	} | ||||
| 	datasetId, _ := strconv.ParseInt(form.Value["datasetId"][0], 10, 64) | ||||
| 	req = proto.UploadFileRequest{ | ||||
| 		Creator:   userInfo.UserId, | ||||
| 		Scene:     scene, | ||||
| 		Files:     files, | ||||
| 		DatasetId: datasetId, | ||||
| 	} | ||||
| 	data, err = repo.UploadFile(c, req) | ||||
| 	go s.SaveLog("文件上传", "Manage", "", "", "", fmt.Sprintf("%d", userInfo.UserId), c.Request.RemoteAddr, "") | ||||
|  |  | |||
|  | @ -411,6 +411,7 @@ type UploadFileRequest struct { | |||
| 	Creator   int64                   `json:"creator"` | ||||
| 	Scene     string                  `json:"scene"` | ||||
| 	Files     []*multipart.FileHeader `json:"files"` | ||||
| 	DatasetId int64                   `json:"datasetId"` | ||||
| } | ||||
| 
 | ||||
| type BrandRequest struct { | ||||
|  |  | |||
|  | @ -65,6 +65,7 @@ type DatasetItem struct { | |||
| 	Creator      int64  `json:"creator"` | ||||
| 	CreateAt     int64  `json:"createAt"` | ||||
| 	DatasetCount int64  `json:"datasetCount"` | ||||
| 	DatasetSize  int64  `json:"datasetSize"` | ||||
| } | ||||
| 
 | ||||
| type NodeState struct { | ||||
|  |  | |||
|  | @ -97,11 +97,16 @@ func (rp *repo) DatasetList(ctx context.Context, req proto.DatasetRequest) (rsp | |||
| 		} | ||||
| 		data := make([]proto.DatasetItem, len(list)) | ||||
| 		for k, v := range list { | ||||
| 			detailList := make([]model.DatasetDetail, 0) | ||||
| 			detailList := make([]model.FileManager, 0) | ||||
| 			datasetCount, err := rp.engine.Where("dataset_id = ?", v.DatasetId).FindAndCount(&detailList) | ||||
| 			if err != nil { | ||||
| 				goto ReturnPoint | ||||
| 			} | ||||
| 			fm := new(model.FileManager) | ||||
| 			datasetSize, err := rp.engine.Where("dataset_id = ?", v.DatasetId).SumInt(fm, "file_size") | ||||
| 			if err != nil { | ||||
| 				goto ReturnPoint | ||||
| 			} | ||||
| 			data[k] = proto.DatasetItem{ | ||||
| 				DatasetId:    v.DatasetId, | ||||
| 				DatasetName:  v.DatasetName, | ||||
|  | @ -113,6 +118,7 @@ func (rp *repo) DatasetList(ctx context.Context, req proto.DatasetRequest) (rsp | |||
| 				Creator:      v.Creator, | ||||
| 				CreateAt:     v.CreateAt, | ||||
| 				DatasetCount: datasetCount, | ||||
| 				DatasetSize:  datasetSize, | ||||
| 			} | ||||
| 		} | ||||
| 		rsp.Code = http.StatusOK | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ import ( | |||
| 
 | ||||
| type FileService interface { | ||||
| 	UploadFile(ctx context.Context, req proto.UploadFileRequest) (rsp *proto.BaseResponse, err error) | ||||
| 	UploadFileToMinIo(ctx context.Context, srcFile *multipart.FileHeader, scene string, creator int64) (data *model.FileManager, err error) | ||||
| 	UploadFileToMinIo(ctx context.Context, srcFile *multipart.FileHeader, scene string, datasetId, creator int64) (data *model.FileManager, err error) | ||||
| } | ||||
| 
 | ||||
| func NewFileService(cfg *config.WebConfig, engine *xorm.Engine, logger *logging.Logger) FileService { | ||||
|  | @ -46,12 +46,13 @@ func (rp *repo) UploadFile(ctx context.Context, req proto.UploadFileRequest) (rs | |||
| 	default: | ||||
| 		list := make([]*model.FileManager, len(req.Files)) | ||||
| 		fileUrl := make([]string, len(req.Files)) | ||||
| 		for k, _ := range req.Files { | ||||
| 			fileItem, err := rp.UploadFileToMinIo(ctx, req.Files[k], req.Scene, req.Creator) | ||||
| 		for k := range req.Files { | ||||
| 			fileItem, err := rp.UploadFileToMinIo(ctx, req.Files[k], req.Scene, req.DatasetId, req.Creator) | ||||
| 			if err != nil { | ||||
| 				goto ReturnPoint | ||||
| 			} | ||||
| 			list[k] = fileItem | ||||
| 			list[k].DatasetId = req.DatasetId | ||||
| 			fileUrl[k] = fileItem.AccessUrl | ||||
| 		} | ||||
| 		_, err = rp.engine.Insert(list) | ||||
|  | @ -75,9 +76,11 @@ ReturnPoint: | |||
| 	return rsp, err | ||||
| } | ||||
| 
 | ||||
| func (rp *repo) UploadFileToMinIo(ctx context.Context, srcFile *multipart.FileHeader, scene string, creator int64) (data *model.FileManager, err error) { | ||||
| func (rp *repo) UploadFileToMinIo(ctx context.Context, srcFile *multipart.FileHeader, scene string, datasetId, creator int64) (data *model.FileManager, err error) { | ||||
| 	file, err := srcFile.Open() | ||||
| 	defer file.Close() | ||||
| 	defer func(file multipart.File) { | ||||
| 		_ = file.Close() | ||||
| 	}(file) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | @ -92,9 +95,21 @@ func (rp *repo) UploadFileToMinIo(ctx context.Context, srcFile *multipart.FileHe | |||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	//bucketName := fmt.Sprintf("jky-data/%s/%s", scene, time.Now().Format("20060102"))
 | ||||
| 
 | ||||
| 	objPath := fmt.Sprintf("%s/%s/%s", scene, time.Now().Format("20060102"), fileName) | ||||
| 	info, err := minioClient.PutObject(ctx, "jky-data", objPath, file, srcFile.Size, minio.PutObjectOptions{ContentType: "application/octet-stream"}) | ||||
| 	if datasetId > 0 { | ||||
| 		var h bool | ||||
| 		item := new(model.Dataset) | ||||
| 		h, err = rp.engine.ID(datasetId).Get(item) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		if h && len(item.StoreName) > 0 { | ||||
| 			objPath = fmt.Sprintf("%s/%s/%s/%s", scene, item.StoreName, time.Now().Format("20060102"), fileName) | ||||
| 		} | ||||
| 	} | ||||
| 	//bucketName := fmt.Sprintf("jky-data/%s/%s", scene, time.Now().Format("20060102"))
 | ||||
| 	info, err := minioClient.PutObject(ctx, rp.AppConfig.Minio.Bucket, objPath, file, srcFile.Size, minio.PutObjectOptions{ContentType: "application/octet-stream"}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ type FileManager struct { | |||
| 	FileName  string `xorm:"VARCHAR(200)" json:"fileName"`               //文件名
 | ||||
| 	AccessUrl string `xorm:"VARCHAR(400)" json:"url"`                    //访问路径
 | ||||
| 	Scene     string `xorm:"VARCHAR(40)" json:"scene"`                   //应用场景,0 : 其他, 1: 道路; 2: 桥梁; 3:隧道; 4: 边坡
 | ||||
| 	DatasetId int64  `xorm:"INT(11) index default 0" json:"datasetId"`   //数据集
 | ||||
| 	FileSize  int64  `xorm:"BIGINT" json:"fileSize"`                     //文件大小
 | ||||
| 	FileMd5   string `xorm:"VARCHAR(64)" json:"fileMd5"`                 //文件MD5
 | ||||
| 	Creator   int64  `xorm:"INT(11) index" json:"creator"`               //上传人
 | ||||
|  |  | |||
|  | @ -12,6 +12,10 @@ import ( | |||
| 	"xorm.io/xorm/dialects" | ||||
| ) | ||||
| 
 | ||||
| type Statistics struct { | ||||
| 	Total int64 | ||||
| } | ||||
| 
 | ||||
| var ( | ||||
| 	DB    *xorm.Engine | ||||
| 	Redis *redis.Client | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue