Ich habe eine Menge Zeit damit verbracht, einen einfachen Test zur Arbeit zu bringen. Ich arbeite an einer mobilen App in Reaktion nativ. Ich möchte eine vordefinierte URL generieren und diese URL verwenden, um eine Videodatei auf s3 hochzuladen. Ich versuche zur Zeit nur diesen Ansatz zu testen, indem Sie:Laden Sie das Image mit der vordefinierten URL in S3 hoch.
const file = fs.readFileSync('./video.mp4')
s3.getSignedUrl('putObject', {Bucket: 'mybucket', Key: 'video.mp4'}, (err, url) => {
if (err) { console.log(err); }
else {
fetch(url, {
method: 'PUT',
body: file
})
.then(success => console.log(success.status))
.catch(e => console.log(e))
})
})
ich einen 200-Statuscode erhalten, aber die ‚Datei‘, die auf S3 erscheint hat 0 Byte. Ich habe festgestellt, dass das Gleiche passiert, wenn ich versuche, ALLE Dateien, die ich über fs.readFileSync erhalten habe, hochzuladen. Ich habe es geschafft, dies temporär zu umgehen, indem ich fs.readFileSync ('./ video.mp4', 'base64') mache, aber das funktioniert nicht in meiner App, weil ich auf das Video im Originalformat zugreifen muss, nicht als Base64-String. Ich habe auch erfolgreich s3.upload verwendet, aber das funktioniert auch nicht in meiner App, weil ich alle Aktionen meines Benutzers auf meinem Server authentifizieren möchte, bevor ich ihnen die Erlaubnis gebe, eine Interaktion mit s3 zu machen. Ich würde wirklich einige Ratschläge appreciate. Ich habe den ganzen Tag mit ContentTypes und ContentLengths herumgespielt.
Sie folgen auf diese Weise tu setzen und erhalten Objekt? -> [AWSJavaScriptSDK] (http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-examples.html) – aldanux