Не могу сохранить поток чтения в Amazon S3, используя aws2js - PullRequest
0 голосов
/ 01 февраля 2012

В моем приложении node.js я загружаю файл (который сохраняется в локальной файловой системе -> / tmp /), из которого я создаю поток, для сохранения этого файла в моем S3bucket с помощью aws2js (Amazon Привязки CLI) . Проблема начинается с попытки сначала сохранить файл на S3 с помощью putStream (...) , прежде чем я сделаю какие-либо дальнейшие манипуляции. (использование ´putFile (filepath) ´ работает!)

Запись в моем Bucket создана, и при обратном вызове не выдается никакой ошибки. Но содержимое файла не было сохранено, и запись имеет 0 байтов.

После, мой код;

....
var fileStream=fs.createReadStream(file.path),
    savePath = _makeSavePath( file.name );                  

s3.putStream(savePath, fileStream, 'public-read', {'content-type': file.type.mime, 'content-length':file.length}, function (err, s3File) {
    if (err){
        console.error(err);
        fileGetCB(err);
        return;
    }
    console.log("SAVED TO S3 '"+savePath+"'!!");

    //do further manipulations with fileStream
});
...

Я могу заверить, что file инициализирован и что файл в file.path существует.

Причина, по которой я использую поток, а не S3.putFile(path), заключается в том, что я буду дополнительно манипулировать файлом. Используя поток, я позже мог бы использовать его повторно, так что не каждый модуль должен перечитывать весь файл (возможно, даже «повторно использовать» поток не возможно, но это не проблема (пока) ..)

Я очень полезен для любой руки в любом направлении, так как я не могу понять, почему это не работает в течение 4 дней попытки и неудачи. Спасибо!

Ответы [ 3 ]

1 голос
/ 02 февраля 2012

На самом деле я допустил ошибку в своем первоначальном посте на GitHub. aws2js внутренне изменил способ загрузки потока на S3.

Что касается node.js v0.6.9, он нестабилен как таковой, но у него нарушенная обработка Ожидается: 100-продолжить .

0 голосов
/ 07 мая 2012

Вы можете взглянуть на AwsSum и этот пример из репозитория сценария:

AwsSum может передавать потоковые файлы, как вы хотите, используя fs.createReadStream (), работает на всех версиях узла v0.6.x и также активно поддерживается.

Дайте мне знать, как вы ладите и нужны ли вамлюбая помощь.

Отказ от ответственности: я автор AwsSum.:)

0 голосов
/ 02 февраля 2012

I вступил в контакт с владельцем проекта, и он указал, что способ, которым узел обрабатывает потоки, изменился внутренне. Он также отметил, что узел 0.6.9 в настоящий момент не стабилен. Я протестировал свой скрипт с Node 0.6.5 (версией сразу после большой смены) и использовался aws2js@0.6.4. Я использую код, как я описал выше и; ОНО РАБОТАЕТ! УРА! :)

...