如果在
localhost
上运行我的代码,然后上传到 AWS-lambda
那么如果我在浏览器上使用链接,它将显示图像,但如果我部署到 lambda
然后上传它,它将不会显示图像。
我有这个上传代码
func UploadFile(uploader *manager.Uploader, key string, file multipart.File, fileHeader *multipart.FileHeader) (string, error) {
if file == nil {
return "", errors.New("file is nil")
}
contentType := fileHeader.Header.Get("Content-Type")
if contentType == "" {
contentType = "application/octet-stream" // Default to binary if content type is not provided
}
fileStat, err := fileHeader.Open()
if err != nil {
return "", fmt.Errorf("failed to open file for debugging: %w", err)
}
defer fileStat.Close()
if _, err := file.Seek(0, 0); err != nil {
return "", errors.New("failed to reset file cursor: " + err.Error())
}
result, err := uploader.Upload(context.TODO(), &s3.PutObjectInput{
Bucket: aws.String("unleap-bucket"),
Key: aws.String("uneleap/" + key),
Body: file,
ContentType: aws.String(contentType),
ACL: types.ObjectCannedACLPublicRead,
})
if err != nil {
return "", err
}
// Ensure the result is not nil and return the location of the uploaded file
if result == nil || result.Location == "" {
return "", errors.New("failed to get the uploaded file location")
}
return result.Location, err
}
这对我来说有点意外,
如果我从本地主机上传,链接将显示,但如果我从 lambda 上传,它将不会显示
这是我的
serverless file
service: uneleap-api-client
frameworkVersion: ">=4.1.19"
provider:
name: aws
region: eu-north-1
runtime: go1.x
stage: ${opt:stage}
iam:
role:
statements:
- Effect: "Allow"
Action:
- "s3:PutObject"
- "s3:GetObject"
- "s3:PutObjectAcl"
Resource: "arn:aws:s3:::u-bucket/*"
custom:
hooks:
'package:initialize': ./scripts/generate_swagger.sh
package:
patterns:
- '!*/**'
- bin/main
functions:
api:
handler: bin/main
events:
- http:
path: /{proxy+}
method: ANY
cors: true
我在长时间搜索后添加了这个,但还没有解决方案
iam:
role:
statements:
- Effect: "Allow"
Action:
- "s3:PutObject"
- "s3:GetObject"
- "s3:PutObjectAcl"
Resource: "arn:aws:s3:::u-bucket/*"