将图像上传到 S3 以获得更大的文件
Uploading Images to S3 for larger files
我一直在尝试使用以下代码将图像上传到 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
开始,它开始偶尔工作。
你是怎么解决这个问题的?
干杯
您可以使用模块 superagent (https://github.com/visionmedia/superagent) that supports file uploading with formData. Then, in the backend, you need to use 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);
})
})
使用此代码,每次您将文件上传到 /register 并在 formdata 中使用文件内容,您的图像将存储在后端的 /uploads 文件夹中,然后再存储到您的 S3 帐户。上传后,您可以使用
从上传文件夹中删除文件
fs.remove(req.file.path)
我一直在尝试使用以下代码将图像上传到 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
开始,它开始偶尔工作。
你是怎么解决这个问题的?
干杯
您可以使用模块 superagent (https://github.com/visionmedia/superagent) that supports file uploading with formData. Then, in the backend, you need to use 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);
})
})
使用此代码,每次您将文件上传到 /register 并在 formdata 中使用文件内容,您的图像将存储在后端的 /uploads 文件夹中,然后再存储到您的 S3 帐户。上传后,您可以使用
从上传文件夹中删除文件fs.remove(req.file.path)