2013-06-15 15 views
6

Wenn der für nods.js aws-sdk npm Plugin, habe ich eine pdf auf 50kb mit dem folgenden Code (AWS S3) hochladen:Knoten aws-sdk s3 Datei-Upload Größen

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

Aber wenn ein 11mb pdf hochladen, sogar mit der Angabe der ContentLength, dauert der Upload einfach für immer, auch mit einer Zeitüberschreitung von 2 Minuten.

Die Frage ist, wie mache ich aws s3 die große pdf-Datei akzeptieren?

UPDATE

Ich habe noch keine Unterlagen oder Anwers für die Frage gefunden.

UPDATE 2

ich Antworten akzeptieren diesen oder einen anderen Rahmen, der Show, die dies tun können. Ich werde dieses Framework benötigen, um auch das Authored-Lesen des Objekts zu ermöglichen.

UPDATE 3 Ich habe es funktioniert für jetzt, aber ich habe keinen Grund gefunden, es sollte nicht funktionieren.

Vielen Dank im Voraus!

+0

Ich glaube nicht, dass es ein Code-Problem ist. Das Hochladen auf S3 ist normalerweise langsam und Netzwerkschwankungen können es noch unberechenbarer machen. Wenn Sie Bedenken haben, große Dateien hochzuladen, könnten Sie mehrteilige Uploads verwenden. Hier ist ein Beispiel: https://gist.github.com/sevastos/5804803 – Sev

+0

Nun, der mehrteilige Upload klingt nett, aber ist das wirklich notwendig? Größtes PDF ist ~ 50mb Ich kann eine Antwort annehmen, wenn Sie schreiben, dass es im Allgemeinen langsam usw. usw. ist, weil ich es jetzt ohne irgendwelche Änderungen von meinem Jobinternet arbeiten lasse, der schneller als meine Häuser ist. –

Antwort

7

Die Verbindung zu S3 ist nicht schnell und abhängig von den Netzwerkschwankungen können Sie Timeouts und andere seltsame Verhaltensweisen bekommen.

Der von Ihnen bereitgestellte Code ist in Ordnung, aber Sie könnten Multipart-Uploads nutzen, die Probleme insbesondere mit> 5 MB-Dateien lösen könnten.

Ich machte a rough implementation of a multipart upload und machte es auch, den Upload von jedem fehlerhaften Teil bis zu 3 mal zu wiederholen, das wird auch für kleinere Dateien als 5MB funktionieren.

+0

Danke, ich werde jetzt mit meinem eigenen Code bleiben, aber ich weiß, wo ich nachsehen muss, wenn das Problem erneut auftritt. Vielen Dank für Ihre Antwort! –

+0

Gern geschehen :) – Sev

+0

Ich versuche, ~ 60 Mb-Datei ohne Multipart hochladen. Seltsamerweise funktioniert es in meinem dev env, von meiner lokalen Maschine aus. Es wird jedoch ein Fehler von meinem in AWS gehosteten Produktions-Env-Format angezeigt. Fehler: "(Knoten) Warnung: Rekursiver Prozess.NextTick erkannt. Dies wird in der nächsten Version des Knotens einbrechen. Bitte verwenden Sie setImmediate für rekursive Verzögerung." – Shrey