如何使用nodejs/aws-sdk将base64编码的pdf直接上传到s3?

2024-05-10

我正在尝试使用以下代码将 base64 编码的 pdf 上传到 S3,而无需将文件写入文件系统。

const AWS = require('aws-sdk');
exports.putBase64 = async (object_name, buffer, bucket) => {
const params = {
    Key: object_name,
    Body: buffer,
    Bucket: bucket,
    ContentEncoding: 'base64',
    ContentType: 'application/pdf'
};
const response = await S3.upload(params).promise();
return response;
};

其中 buffer 是编码为 base64 的空白 pdf。当尝试在 s3 上打开文件时,我收到“我们无法打开此文件 出了点问题。”试图打开它时。

但是,如果我将 base64 编码写入文件然后上传,它就可以工作。

await fs.writeFileSync(`./somepdf.pdf`, base_64, 'base64');
exports.put = async (object_name, file_location, bucket, content_type) => {
const file_content = fs.readFileSync(file_location);
const params = {
    Key: object_name,
    Body: './somepdf.pdf',
    Bucket: bucket,
    ContentType: 'application/pdf'
};
const response = await S3.upload(params).promise();
return response;
};

我注意到,直接上传文件时,通过文本编辑器查看文件时的文件编码不是 base64 编码,但查看以严格定义的 contentencoding base64 上传的文件会显示 base64。我尝试使用 atob 将 base64 转换为 blob,但产生了相同的结果,因此我假设可能缺少一个参数或标头。


我遇到了同样的问题并设法通过进行以下更改来解决它:

const AWS = require('aws-sdk');
const S3 = new AWS.S3();

exports.putBase64 = async (object_name, buffer, bucket) => {

    const params = {
        Key: object_name,
        Body: Buffer.from(buffer, 'base64'), // <---------
        Bucket: bucket,
        ContentType: 'application/pdf'
    };

    return await S3.upload(params).promise();
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用nodejs/aws-sdk将base64编码的pdf直接上传到s3? 的相关文章

随机推荐