从 Lambda 上传时图像无法显示

问题描述 投票:0回答:1

如果在

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/*"
amazon-web-services go aws-lambda serverless
1个回答
0
投票

multipart/form-data
添加到您的
binary media type
..

所以转到

Api Gateway
,然后单击您正在使用的
Api
,然后单击左手角的
Api settings
,然后单击
add it

Binary media type

© www.soinside.com 2019 - 2024. All rights reserved.