无服务器框架 - 将二进制文件上传到S3被损坏



i有一个端点,该端点在包括文件在内的表单数据。该文件可以是文本文件,图像或PDF。我正在使用Busboy(v0.2.14(来解析表单数据。该代码看起来像这样:

        let buffers = [];
        file.on('data', data => buffers.push(data));
        file.on('end', () => {
            result.filename = filename;
            result.contentType = mimetype;
            // Concat the chunks into a Buffer
            result.file = new Buffer.concat(buffers);
        });
        // ...
        busboy.write(event.body, event.isBase64Encoded ? 'base64' : 'binary');
        busboy.end();

但是,当我使用AWS SDK(v2.97.0(将文件数据推到S3时,当我去查看它们时,所有二进制文件都会损坏。文本文件不会发生这种情况。S3上传代码看起来像这样:

static myPutObject(bucketName, fileName, data, contentType, acl) {
    const params = {
        Bucket: bucketName,
        Key: fileName,
        Body: data,
        ACL: acl,
        ContentType: contentType,
        ContentEncoding: 'base64'
    };
    return new AWS.S3().putObject(params).promise();
}

我已经尝试了在堆栈溢出或github上找到的所有东西,没有运气。

如果您在正面使用API网关。除非您明确启用了二进制媒体类型,否则Apigateway将构造传入的二进制文件。如果您正在使用SLS部署,则可以添加:

apiGateway:
  binaryMediaTypes:
  - '*/*'

在"提供商"部分

在这里阅读:https://serverless.com/framework/docs/providers/aws/aws/events/apigatewaywaywaywaywaywaywway.binary-media-types

s3是"对象"one_answers"对象"存储。它不知道您的内容是二进制的还是文本或UTF-16编码。它在收到的所有字节时存储所有字节,并在要求时提供服务。

这是我们如何验证问题是在S3上还是使用我们的代码。

  1. 在本地写二进制文件
  2. 将同一文件发送到S3
  3. 从S3
  4. 下载
  5. 验证本地文件哈希和下载文件hash for File Integrity
  6. 这将帮助您验证二进制文件内容。

希望它有帮助。

相关内容

  • 没有找到相关文章

最新更新