【问题标题】:Image Upload in s3 using lambda API gateway in Node js (aws-lambda-multipart-parser)在 Node js (aws-lambda-multipart-parser) 中使用 lambda API 网关在 s3 中上传图片
【发布时间】:2023-01-15 02:33:03
【问题描述】:

我尝试使用 AWS lambda API 网关在 s3 存储桶中上传图片和视频

成功上传图像并获得位置也作为响应,但我无法预览它

    const multipart = require('aws-lambda-multipart-parser');
    const AWS = require('aws-sdk');
    const { config } = require('./config')
    const { v4: uuidv4 } = require('uuid')
    const fs = require('fs');

    const s3 = new AWS.S3({
      accessKeyId:config?.dev?.aws_s3?.ACCESS_KEY,
      secretAccessKey:config?.dev?.aws_s3?.SECRET_KEY
    })
    
    
    //After the parse data from the event. Event declared as a param

    const result =  await multipart.parse(param);
    let myFile= result.media.filename.split(".")
    let fileType = myFile[myFile.length - 1];
    const fileName = uuidv4()+'.'+fileType;


    const uploadData = {
        Bucket : config?.dev?.aws_s3?.BUCKETNAME,
        Key : fileName,
        Body : Buffer.from(result.media.content, 'binary'),
        ContentType : result.media.contentType,
        ACL : 'public-read',
        Conditions: [
            ['content-length-range', 0, 10000000] // 10 Mb
        ]
    }

    try {

        const responseData = await s3.upload(uploadData).promise()
        return  {
            "body" : {
                "message" : "Image uploaded successfully",
                "data" : responseData
            },
            'statusCode': 200
        }
    } catch (e) {
        return  {
            "body" : {
                "message" : e.message
            },
            'statusCode': 500
        }
    }

// Uploading Data to s3

// Response

{
"message": "Image uploaded successfully",
"data": {
    "ETag": "\"662d32878c3e0628d2958e95fc055855\"",
    "Location": "https://bucketname.s3.amazonaws.com/03c2fcd1-ab92-42a8-93cf-d6a89545c77e.jpeg",
    "key": "03c2fcd1-ab92-42a8-93cf-d6a89545c77e.jpeg",
    "Key": "03c2fcd1-ab92-42a8-93cf-d6a89545c77e.jpeg",
    "Bucket": "bucketname"
}

}

问题是图像未加载。你能帮助解决这个问题吗?应该支持它的视频和音频

错误:图像无法显示,它包含错误

【问题讨论】:

    标签: node.js amazon-s3 aws-lambda aws-sdk multipartform-data


    【解决方案1】:

    我的 Lambda NodeJS 函数也有类似的问题。前端网页使用 fetch() 将文件作为来自点击处理程序的 FormData 推送

    NodeJS Lambda 函数解析数据,存储到 S3,但它是一个无效的图像文件。

    我在其他一些 SO 帖子中找到了修复程序,这些帖子引导我进行了两项 AWS 仪表板更改,这些更改产生了重大影响并让我开始工作:

    • AWS API Manager -> 设置 -> 二进制媒体类型 -> 添加二进制媒体类型“multipart/form-data”

    • AWS API Manager -> 资源 -> 我的资源 (/photos) -> 我的方法 (POST) -> 方法请求 -> HTTP 请求标头 -> 添加“接受”并添加“内容类型”

    希望这对你有帮助。

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 2020-10-07
      • 1970-01-01
      • 2019-01-21
      • 2019-05-27
      • 2018-07-12
      • 2020-05-11
      • 1970-01-01
      • 2019-09-07
      相关资源
      最近更新 更多