Отправка двоичных данных в Amazon S3 с помощью Node.js

пытаюсь взять изображение и загрузить его в корзину Amazon S3 с помощью Node.js. В конце концов, я хочу получить изображение до S3, а затем получить доступ к URL-адресу S3 и просмотреть изображение в браузере. Я'используя запрос Curl для выполнения HTTP-запроса POST с изображением в качестве тела.

curl -kvX POST --data-binary "@test.jpg" 'http://localhost:3031/upload/image'

Затем на стороне Node.js я делаю это:

exports.pushImage = function(req, res) {
    var image = new Buffer(req.body);
    var s3bucket = new AWS.S3();
    s3bucket.createBucket(function() {
        var params = {Bucket: 'My/bucket', Key: 'test.jpg', Body: image};
        // Put the object into the bucket.
        s3bucket.putObject(params, function(err) {
            if (err) {
                res.writeHead(403, {'Content-Type':'text/plain'});
                res.write("Error uploading data");
                res.end()
            } else {
                res.writeHead(200, {'Content-Type':'text/plain'});
                res.write("Success");
                res.end()
            }
        });
    });
};

Мой файл имеет размер 0 байт, как показано на Amazon S3. Как мне сделать так, чтобы я мог использовать Node.js для передачи двоичного файла до S3? Что я делаю не так с двоичными данными и буферами?

ОБНОВИТЬ:

Я узнал, что мне нужно было сделать. Запрос curl - это первое, что нужно изменить. Это рабочий:

curl -kvX POST -F foobar=@my_image_name.jpg 'http://localhost:3031/upload/image'

Затем я добавил строку для преобразования в поток. Это рабочий код:

exports.pushImage = function(req, res) {
    var image = new Buffer(req.body);
    var s3bucket = new AWS.S3();
    s3bucket.createBucket(function() {
        var bodyStream = fs.createReadStream(req.files.foobar.path);
        var params = {Bucket: 'My/bucket', Key: 'test.jpg', Body: bodyStream};
        // Put the object into the bucket.
        s3bucket.putObject(params, function(err) {
            if (err) {
                res.writeHead(403, {'Content-Type':'text/plain'});
                res.write("Error uploading data");
                res.end()
            } else {
                res.writeHead(200, {'Content-Type':'text/plain'});
                res.write("Success");
                res.end()
            }
        });
    });
};

Итак, чтобы выгрузить файл в конечную точку API (используя Node.js и Express) и получить от API этот файл в Amazon S3, сначала нужно выполнить запрос POST с помощью команды "файлы» поле заселено. Файл заканчивается на стороне API, где он находится, вероятно, в некотором каталоге tmp. Amazon»s3 метод putObject требует Stream, поэтому вам нужно создать поток чтения, передавфс Модуль путь, где существует загруженный файл.

Я неНе знаю, если это правильный способ загрузки данных, но это работает. Кто-нибудь знает, есть ли способ POST двоичных данных внутри тела запроса и API отправить это на S3? Я неЯ не знаю, в чем разница между загрузкой нескольких частей и стандартным POST в body.

Ответы на вопрос(1)

Ваш ответ на вопрос