2013-06-15 26 views
6

Podczas korzystania z AWS-sdk npm plugin nods.js, mogę przesłać plik PDF na 50kb z następującego kodu (do AWS S3):Węzeł AWS-sdk przesłać plik s3 rozmiarach

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); 
      } 
     }); 

Ale kiedy Przesyłając plik PDF o wielkości 11 MB, nawet po podaniu numeru ContentLength, przesyłanie trwa wiecznie, nawet z czasem oczekiwania wynoszącym 2 minuty.

Pytanie brzmi, jak sprawić, aby aws s3 akceptował duży plik pdf?

UPDATE

ja nadal nie znalazłem żadnej dokumentacji lub anwers na pytanie.

UPDATE 2

zgodzę odpowiedzi, które pokazują na tej lub innej ramy, która może to zrobić. Będę potrzebował tej struktury, aby móc zezwolić na automatyczne odczytanie obiektu.

UPDATE 3 mam go teraz pracuje ale nie znalazłem powód to nie powinno działać.

Z góry dziękuję!

+0

Nie sądzę, że jest to problem z kodem. Przesyłanie na S3 jest zwykle powolne, a zmiany w sieci mogą sprawić, że będzie on jeszcze bardziej nieprzewidywalny. Jeśli martwisz się o przesyłanie dużych plików, możesz użyć wieloczęściowych plików. Oto przykład: https://gist.github.com/sevastos/5804803 – Sev

+0

Przesyłanie wieloczęściowe brzmi nieźle, ale czy to naprawdę konieczne? Największy plik PDF to ~ 50mb. Potrafię przyjąć odpowiedź, jeśli piszesz, że ogólnie jest powolna itd. Itd., Ponieważ mam teraz działającą bez żadnych modyfikacji z mojej pracy Internet, który jest szybszy niż moje domy. –

Odpowiedz

7

Połączenie z S3 nie jest szybkie, a następnie, w zależności od fluktuacji sieci, można uzyskać limity czasu i inne dziwne zachowania.

Podany kod jest w porządku, ale możesz skorzystać z funkcji przesyłania wieloczęściowego, która może rozwiązać problemy, szczególnie w przypadku plików> 5 MB.

Zrobiłem a rough implementation of a multipart upload, a także zrobiłem to, aby ponowić przesyłanie jakiejkolwiek uszkodzonej części do 3 razy, będzie to również działać dla mniejszych plików niż 5 MB.

+0

Dzięki, pozostanę z własnym kodem na razie, ale wiem, gdzie szukać, czy problem pojawi się ponownie. Dziękuję za Twoją odpowiedź! –

+0

Nie ma za co :) – Sev

+0

Próbuję przesłać plik ~ 60 Mb bez wieloczęściowego. Dziwnie to działa dobrze w moim dev env, od mojej lokalnej maszyny. Ale generuje błąd z mojego środowiska produkcyjnego hostowanego na AWS. Błąd: "ostrzeżenie (węzeł): proces rekursywny.następnie wykryto. Spowoduje to uszkodzenie następnej wersji węzła. Użyj setImmediate do rekurencyjnego odroczenia." – Shrey

Powiązane problemy