我需要将一个pdf文件从UI(用Javascript编写)提升到S3,但我试图将该文件上传到S3,我得到一些unicode格式的文本,当我将该文本复制到记事本,或者说,任何其他文本编辑器,我可以将人类可读的文本。
我正在使用pdfmake获取文件的内容,并使用getBufffer方法上传它。
var content = generatePDF(base64Img);
pdfMake.createPdf(content).getBuffer(function (data) {//Code}我用来将文件上传到S3的代码。
var params = {
Bucket: bucketName,
Key: file_name,
Body: data.toString(),
ContentType: 'application/pdf'
}
s3.upload(params, function (err, data) {
if (err) {
// code
}else{
//code
}该文件正在成功上传,但我得到的文本如下
!
" #$%&!' ()*')+,
!
!
!
!但是我把它粘贴到其他文本编辑器,我得到了
Date: 04/20/19发布于 2019-04-23 14:16:48
通过将数据从getBuffer传递到S3,解决了上述问题。在S3中,我传递给一个缓冲区,如
var data = new Buffer(event.data, 'binary');
将数据上传到S3。
var params = {
Bucket: bucketName,
Key: file_name,
Body: data,
ContentType: 'application/pdf'
}
s3.upload(params, function (err, data) {
if (err) {
// code
}else{
//code
}发布于 2020-04-14 18:26:56
要将文件从客户端直接上载到s3桶,可以使用穆特-S3。
来自客户端:
axios.post(url, data, {
onUploadProgress: ProgressEvent => {
this.setState({
loaded: (ProgressEvent.loaded / ProgressEvent.total * 100),
})
},
})
.then(res => { // then print response status
toast.success('Upload Success!')
})
.catch(err => { // then print response status
toast.error('Upload Failed!')
})服务器端:
const upload = multer({
storage: multerS3({
s3: s3,
acl: 'public-read',
bucket: BUCKET_NAME,
key: function (req, file, cb) {
UPLOADED_FILE_NAME = Date.now() + '-' + file.originalname;
cb(null, UPLOADED_FILE_NAME);
}
})
}).array('file');
app.post('/upload', function (req, res) {
upload(req, res, function (err) {
if (err instanceof multer.MulterError) {
return res.status(500).json(err)
// A Multer error occurred when uploading.
} else if (err) {
return res.status(500).json(err)
// An unknown error occurred when uploading.
}
console.log('REQUEST FILE IS', UPLOADED_FILE_NAME)
return res.status(200).send(UPLOADED_FILE_NAME)
// Everything went fine.
})
});https://stackoverflow.com/questions/55804958
复制相似问题