我一直试图使用以下代码将图像上传到s3
function(base64Image){
let imageBuffer = new Buffer(base64Image.replace(/^data:image\/\w+;base64,/, ""), 'base64');
return S3.putObject({
Bucket: `my-bucket`,
Key: `my-key`,
Body: imageBuffer,
ACL: 'public-read',
ContentType: "image/jpeg",
ContentEncoding: "base64"
}).promise()
.then((response) => {
})
.catch((error) => {
})
})
}
它可以完美运行,但不适用于较大的文件,因此启动2.0 MB
有时会起作用。
您如何解决这个问题?
欢呼
答案 0 :(得分:0)
您可以使用模块 superagent (https://github.com/visionmedia/superagent),该模块支持使用formData上传文件。然后,在后端,您需要使用 multer (https://github.com/expressjs/multer)来获取文件。
在前端文件中
//Method to do the request
superagent
.post(/register")
.attach("avatar", uploadedImage)
uploadedImage具有图像内容
在后端文件中
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })
import fs from 'fs-extra'
exports.uploadImage = ((name, image) => {
AWS.config.update({ 'region': process.env.GROUP_REGION, 'accessKeyId': process.env.AWS_ACCESS_KEY_ID, 'secretAccessKey': process.env.AWS_SECRET_KEY })
var s3Bucket = new AWS.S3({ params: { Bucket: process.env.S3_BUCKET_NAME } })
var data = { Key: name, Body: image }
return new Promise((resolve, reject) => {
s3Bucket.putObject(data, function (err, data) {
if (err) {
console.log('Error uploading data: ', data)
reject(err)
} else {
console.log('succesfully uploaded the image!')
resolve(data)
}
})
})
})
router.post('/register', upload.single('avatar'), (req, res, next) => {
return fs.readFile(req.file.path)
.then(content => {
uploadImage("File.jpg", content);
})
})
使用此代码,每次将文件内容上载到formdata中的文件/ register时,图像将存储在后端的/ uploads文件夹中,然后存储到S3帐户中。上传后,您可以使用
从上传文件夹中删除文件fs.remove(req.file.path)