我有一项用于将文件上传到AWS S3 的服务。我试图与 goroutine 一起使用而不上传文件。如果我上传没有 goroutine 的文件,它应该等到完成然后给出响应,如果我使用 goroutine 它将在后台运行并且更快地响应客户端。
如果我使用 goroutine 上传失败怎么办?然后那个文件没有上传到AWS S3?你能告诉我如何处理这个问题吗?
这是我上传文件的功能
func uploadToS3(s *session.Session, size int64, name string , buffer []byte)( string , error) {
tempFileName := "pictures/" + bson.NewObjectId().Hex() + "-" + filepath.Base(name)
_, err := s3.New(s).PutObject(&s3.PutObjectInput{
Bucket: aws.String("myBucketNameHere"),
Key: aws.String(tempFileName),
ACL: aws.String("public-read"),
Body: bytes.NewReader(buffer),
ContentLength: aws.Int64(int64(size)),
ContentType: aws.String(http.DetectContentType(buffer)),
ContentDisposition: aws.String("attachment"),
ServerSideEncryption: aws.String("AES256"),
StorageClass: aws.String("INTELLIGENT_TIERING"),
})
if err != nil {
return "", err
}
return tempFileName, err
}
func UploadFile(db *gorm.DB) func(c *gin.Context) {
return func(c *gin.Context) {
file, err := c.FormFile("file")
f, err := file.Open()
if err != nil {
fmt.Println(err)
}
defer f.Close()
buffer := make([]byte, file.Size)
_, _ = f.Read(buffer)
s, err := session.NewSession(&aws.Config{
Region: aws.String("location here"),
Credentials: credentials.NewStaticCredentials(
"id",
"key",
"",
),
})
if err != nil {
fmt.Println(err)
}
go uploadToS3(s, file.Size, file.Filename, buffer)
c.JSON(200, fmt.Sprintf("Image uploaded successfully"))
}
}
我也在想,如果有很多请求每 5-10 分钟上传超过 10000 个以上的文件怎么办?是否会因为请求太多而无法上传某些文件?
红颜莎娜
牧羊人nacy
HUWWW
相关分类