如何使用 nodejs/aws-sdk 将 base64 编码的 pdf 直接上传到 s3?
How to upload base64 encoded pdf directly to s3 with nodejs/aws-sdk?
我正在尝试使用以下代码将 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;
};
其中缓冲区是编码为 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 但产生了相同的结果,所以我假设我可能缺少一个参数或 header.
创建新缓冲区
const newBuffer = buffer.replace(/^data:.+;base64,/, "")
现在在参数中使用这个新缓冲区。这应该有效!
我遇到了同样的问题,并通过进行以下更改设法解决了这个问题:
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();
};
我正在尝试使用以下代码将 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;
};
其中缓冲区是编码为 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 但产生了相同的结果,所以我假设我可能缺少一个参数或 header.
创建新缓冲区
const newBuffer = buffer.replace(/^data:.+;base64,/, "")
现在在参数中使用这个新缓冲区。这应该有效!
我遇到了同样的问题,并通过进行以下更改设法解决了这个问题:
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();
};