提问者:小点点

上载到S3的映像已损坏


我有问题上传一个文件从邮递员到aws lambda+S3。如果我理解正确,映像必须是一个base64字符串,并且通过JSON发送才能与lambda和API网关一起工作,所以我将映像转换为base64,并在postman中使用base64字符串

文件上传到S3,但是当我下载S3对象并打开它时,我得到了

所以我不认为我上传的是正确的。我已经使用了一个base64到图像转换器和图像显示,所以base64字符串是正确的,然后通过邮递员发送它,所以我的设置中的一些东西关闭。我做错了什么?谢谢你的帮助!

upload.js

const AWS = require('aws-sdk');
const s3 = new AWS.S3();
exports.handler = async (event, context, callback) => {
    let data = JSON.parse(event.body);
    let file = data.base64String;


    const s3Bucket = "upload-test3000";
    const objectName = "helloworld.jpg";
    const objectData = data.base64String;
    const objectType = "image/jpg";
    try {
        const params = {
            Bucket: s3Bucket,
            Key: objectName,
            Body: objectData,
            ContentType: objectType
        };
        const result = await s3.putObject(params).promise();
        return sendRes(200, `File uploaded successfully at https:/` + s3Bucket + `.s3.amazonaws.com/` + objectName);

    } catch (error) {
        return sendRes(404, error);
    }
};
const sendRes = (status, body) => {
    var response = {
        statusCode: status,
        headers: {
            "Content-Type": "application/json",
            "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
            "Access-Control-Allow-Methods": "OPTIONS,POST,PUT",
            "Access-Control-Allow-Credentials": true,
            "Access-Control-Allow-Origin": "*",
            "X-Requested-With": "*"
        },
        body: body
    };
    return response;
};

。png


共1个答案

匿名用户

在构建参数时,您应该添加内容编码,否则您只是上传文本数据:

const params = {
  Bucket: s3Bucket,
  Key: objectName,
  Body: objectData,
  ContentType: objectType,
  ContentEncoding: 'base64'
};