Nella classe S3
di aws-sdk, qual è la differenza tra upload()
e putObject()
? Sembrano fare la stessa cosa Perché potrei preferire uno rispetto all'altro?Differenza tra upload() e putObject() per caricare un file su S3?
risposta
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.
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()
.
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".
Quindi, perché qualcuno potrebbe preferire "putObject()' a 'upload()'? – callum
putObject viene utilizzato principalmente nei criteri per AWS S3. – error2007s
Il primo punto elenco è errato in base ai documenti: "Carica un buffer di dimensioni arbitrarie, blob o flusso" – callum