Загрузка изображений на S3 для больших файлов - PullRequest
0 голосов
/ 05 ноября 2018

Я пытался загрузить изображения на 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, он иногда начинает работать.

Как вы решаете это?

Приветствия

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете использовать модуль 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);
                })
    })

С этим кодом каждый раз, когда вы загружаете файл / регистрируетесь с содержимым файла в данных формы, ваше изображение будет храниться в папке / uploads на вашем бэкэнде, а затем в вашей учетной записи S3. После загрузки вы можете удалить файл из папки загрузки с помощью

fs.remove(req.file.path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...