2016-07-18 134 views

risposta

15

La differenza tra l'utilizzo di AWS SDK upload() e putObject() param è il seguente:

  • Se l'MD5 riportato al termine di upload non corrispondenza, tentativi.
  • Se la dimensione del file è abbastanza grande, utilizza il caricamento multipart per caricare le parti in parallelo.
  • Riprova in base alle impostazioni del tentativo del client.
  • È possibile utilizzare per la segnalazione di stato.
  • Imposta il ContentType in base all'estensione del file se non si fornisce esso.
+4

Quindi, perché qualcuno potrebbe preferire "putObject()' a 'upload()'? – callum

+1

putObject viene utilizzato principalmente nei criteri per AWS S3. – error2007s

+0

Il primo punto elenco è errato in base ai documenti: "Carica un buffer di dimensioni arbitrarie, blob o flusso" – callum

13

upload() consente di controllare la modalità di caricamento dell'oggetto. Ad esempio, è possibile definire la concorrenza e le dimensioni della parte.

Dal loro docs: Carica un buffer di dimensioni arbitrarie, blob o flusso, utilizzando la gestione simultanea intelligente delle parti se il carico utile è sufficientemente grande.

Un vantaggio specifico che ho scoperto è che upload() accetterà uno stream senza una lunghezza del contenuto definita mentre lo putObject() no.

Ciò è stato utile in quanto disponevo di un endpoint API che consentiva agli utenti di caricare un file. Il framework ha consegnato il file al mio controller sotto forma di un flusso leggibile senza una lunghezza del contenuto. Invece di dover misurare le dimensioni del file, tutto quello che dovevo fare era passare direttamente alla chiamata upload().

0

Quando cercando la stessa informazione, mi sono imbattuto: https://aws.amazon.com/blogs/developer/uploading-files-to-amazon-s3/

Questa fonte è un po 'datato (riferimento a invece upload_file() e put() - o forse è il Rubino SDK?), Ma sembra che il putObject() è destinato a oggetti più piccoli rispetto allo upload().

Si raccomanda upload() e specifica il motivo:

Questo è il metodo consigliato di utilizzare l'SDK per caricare i file su un secchio . L'utilizzo di questo approccio offre i seguenti vantaggi:

  • Gestisce caricamenti multipart per oggetti più grandi di 15 MB.
  • Apre correttamente i file in modalità binaria per evitare problemi di codifica.
  • Utilizza più thread per caricare parti di oggetti di grandi dimensioni in parallelo.

Poi copre l'operazione putObject():

Per gli oggetti più piccoli, si può scegliere di utilizzare #put invece.

EDIT: ho avuto problemi con l'operazione .abort() sul mio .upload() ed ho trovato questo utile: abort/stop amazon aws s3 upload, aws sdk javascript

Ora i miei vari altri eventi da https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html sparano pure! Con .upload() ho avuto solo "httpUploadProgress".