我正在尝试将在React Native中选择的PDF上传到Amazon s3。为此,我将用base64编码的PDF发送到我的nodejs/adonis服务器,并将其转换为缓冲区(因为我不想将其保存为base64)。
PDF实际上是保存在我的S3桶,但不正确,因为我既不能打开它,也不能下载它。
我就是这么做的
public async storeFile({ request }: HttpContextContract) {
const hash = crypto.randomBytes(32).toString('hex');
let key = `PDF-${hash}`;
//create a single key for each file
const file = request.input('file');
const fileBuffer = Buffer.from(file, 'base64');
//transform the file encoded in base64 into a buffer
await S3Service.uploadManually2(fileBuffer, key);
}
public async uploadManually2(file: Buffer, key: string): Promise<string> {
const params = {
Bucket: Env.get('AWS_BUCKET_NAME'),
Body: file,
Key: key,
ContentType: 'application/pdf',
ACL: 'public-read',
}
await s3.send(new PutObjectCommand(params))
const url = `https://${Env.get('AWS_BUCKET_NAME')}.s3.amazonaws.com/${key}`
return url
}
2条答案
按热度按时间gz5pxeao1#
这里最简单的解决方法是将PDF文件的缓冲区形式转换为可读流,然后将该流传递给S3。
wbrvyc0a2#
我最初的目标是从react-native发送一个PDF到S3。首先,我尝试将文件发送到服务器,然后发送到s3,但对我来说,它的工作方式是从react-native直接发送到s3。为此,我安装了库“react-native-aws 3”并使用函数“put”。
这是我使用的代码: