2013-06-15 30 views
6

Quando si utilizza il plugin NPM AWS-SDK per nods.js, posso caricare un pdf sul 50kb con il seguente codice (per AWS s3):Nodo upload di file s3 AWS-sdk dimensioni

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

Ma quando caricando un pdf di 11mb, anche con l'indicazione dello ContentLength, il caricamento continua per sempre, anche con un timeout di 2 minuti.

La domanda è: come faccio a far sì che aws s3 accetti il ​​grande file pdf?

UPDATE

non ho ancora trovato alcuna documentazione o anwers per la domanda.

UPDATE 2

Accetterò le risposte che lo show di questo o un altro quadro che possono fare questo. Avrò bisogno di quel framework per poter permettere anche l'auth-read dell'oggetto.

UPDATE 3 Ho funzionato per ora ma non ho trovato una ragione per cui non dovrebbe funzionare.

Grazie in anticipo!

+0

Non penso che sia un problema di codice. Il caricamento su S3 è solitamente lento e le fluttuazioni della rete possono renderlo ancora più imprevedibile. Se sei preoccupato per il caricamento di file di grandi dimensioni, potresti utilizzare caricamenti multipart. Ecco un esempio: https://gist.github.com/sevastos/5804803 – Sev

+0

Bene, il caricamento multipart sembra bello ma è davvero necessario? Il più grande PDF è ~ 50 MB Posso accettare una risposta se scrivi che è generalmente lento ecc. Ecc., Perché ora funziona senza alcuna modifica dal mio lavoro internet, che è più veloce delle mie case. –

risposta

7

Il collegamento a S3 non è veloce e quindi, a seconda delle fluttuazioni della rete, è possibile ottenere timeout e altri comportamenti strani.

Il codice che hai fornito va bene, ma potresti sfruttare i caricamenti multipart che potrebbero risolvere problemi soprattutto con i file> 5MB.

Ho effettuato a rough implementation of a multipart upload e ho anche fatto riprovare il caricamento di qualsiasi parte in errore fino a 3 volte, questo funzionerà anche per file più piccoli di 5 MB.

+0

Grazie, rimarrò con il mio codice per ora ma so dove cercare se il problema riappare. La ringrazio per la risposta! –

+0

Prego :) – Sev

+0

Sto provando a caricare file ~ 60 Mb senza multipart. Stranamente funziona bene nel mio dev env, dalla mia macchina locale. Ma genera errore dal mio ambiente di produzione ospitato su AWS. Errore: "(nodo) avviso: process.nextTick ricorsivo rilevato. Questo si interromperà nella prossima versione del nodo. Utilizzare setImmediate per il differimento ricorsivo." – Shrey

Problemi correlati