1.4.5.2
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||
|
||||
package actionutils
|
||||
|
||||
import (
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||
"github.com/TeaOSLab/EdgeUser/internal/utils/sizes"
|
||||
"github.com/iwind/TeaGo/actions"
|
||||
"io"
|
||||
)
|
||||
|
||||
func (this *ParentAction) UploadFile(formFile *actions.File, businessType string) (fileId int64, ok bool, err error) {
|
||||
file, err := formFile.OriginFile.Open()
|
||||
if err != nil {
|
||||
return 0, false, err
|
||||
}
|
||||
|
||||
fileResp, err := this.RPC().FileRPC().CreateFile(this.UserContext(), &pb.CreateFileRequest{
|
||||
Filename: formFile.Filename,
|
||||
Size: formFile.Size,
|
||||
IsPublic: false,
|
||||
MimeType: formFile.ContentType,
|
||||
Type: businessType,
|
||||
})
|
||||
if err != nil {
|
||||
return 0, false, err
|
||||
}
|
||||
fileId = fileResp.FileId
|
||||
|
||||
var buf = make([]byte, 128*sizes.K) // TODO 使用pool管理
|
||||
|
||||
for {
|
||||
n, err := file.Read(buf)
|
||||
if n > 0 {
|
||||
_, chunkErr := this.RPC().FileChunkRPC().CreateFileChunk(this.UserContext(), &pb.CreateFileChunkRequest{
|
||||
FileId: fileId,
|
||||
Data: buf[:n],
|
||||
})
|
||||
if chunkErr != nil {
|
||||
return 0, false, chunkErr
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
if err != io.EOF {
|
||||
return 0, false, nil
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
_, err = this.RPC().FileRPC().UpdateFileFinished(this.UserContext(), &pb.UpdateFileFinishedRequest{
|
||||
FileId: fileId,
|
||||
})
|
||||
if err != nil {
|
||||
return 0, false, err
|
||||
}
|
||||
|
||||
return fileId, true, nil
|
||||
}
|
||||
Reference in New Issue
Block a user