2013-06-15 5 views
6

При использовании AWS-SDk НПМ плагин для nods.js, я могу загрузить PDF на 50kb со следующим кодом (на AWS s3):Узел загрузки AWS-s3 SDK размер файла

var params = { 
      Bucket: BUCKET, 
      Key: pdf_key, 
      Body: file, 
      ContentType: 'application/pdf' 
     }; 
     var s3 = new AWS.S3(); 

     s3.putObject(params, function(error, data) { 
      console.log(data); 
      console.log(error); 
      if (error) { 
       console.log(error); 
       callback(error, null); 
      } else { 
       callback(null, pdf_key); 
      } 
     }); 

Но когда загружая 11 мб, даже с указанием ContentLength, загрузка просто продолжается навсегда, даже с таймаутом в 2 минуты.

Вопрос в том, как заставить aws s3 принять большой файл pdf?

UPDATE

Я до сих пор не нашли какой-либо документации или anwers для вопроса.

UPDATE 2

Приму ответы, шоу той или иной основы, которые могут сделать это. Мне понадобится эта фреймворк, чтобы иметь возможность также разрешить чтение в режиме auth.

ОБНОВЛЕНИЕ 3 Я получил его сейчас, но я не нашел причины, по которой он не должен работать.

Заранее благодарен!

+0

Я не думаю, что это проблема с кодом. Загрузка на S3 обычно медленная, а колебания сети могут сделать ее еще более непредсказуемой. Если вы беспокоитесь о загрузке больших файлов, вы можете использовать многостраничные загрузки. Вот пример: https://gist.github.com/sevastos/5804803 – Sev

+0

Ну, многопользовательская загрузка звучит неплохо, но это действительно необходимо? Самый большой PDF-файл ~ 50 мб. Я могу принять ответ, если вы напишете, что он обычно медленный и т. Д. И т. Д., Потому что теперь я работаю без каких-либо изменений с моей работы в Интернете, что быстрее, чем дома. –

ответ

7

Подключение к S3 не быстро, а затем в зависимости от колебаний сети вы можете получить тайм-ауты и другие странные поведения.

Код, который вы указали, в порядке, но вы можете использовать многостраничные загрузки, которые могли бы решить проблемы, особенно с> 5 МБ-файлами.

Я сделал a rough implementation of a multipart upload, а также сделал попытку повторить загрузку любой неисправной части до 3 раз, это также будет работать для файлов меньшего размера, чем 5 МБ.

+0

Спасибо, я останусь с моим собственным кодом, но я знаю, где искать, если проблема снова появится. Спасибо за ваш ответ! –

+0

Добро пожаловать :) – Sev

+0

Я пытаюсь загрузить файл ~ 60 Mb без multipart. Странно это работает в моем dev env, с моей локальной машины. Но это порождает ошибку из моего производства env, размещенного на AWS. Ошибка: предупреждение «(узел): обнаружен рекурсивный process.nextTick.Это будет ломаться в следующей версии узла. Пожалуйста, используйте setImmediate для рекурсивного отсрочки». – Shrey

Смежные вопросы