Ich verwende das NodeJS AWS SDK, um eine vorgegebene S3-URL zu generieren. Die Dokumente geben ein Beispiel für das Generieren einer vorgegebenen URL .
Hier ist mein genauer Code (ohne vertrauliche Informationen):
const AWS = require('aws-sdk')
const s3 = new AWS.S3()
AWS.config.update({accessKeyId: 'id-omitted', secretAccessKey: 'key-omitted'})
// Tried with and without this. Since s3 is not region-specific, I don't
// think it should be necessary.
// AWS.config.update({region: 'us-west-2'})
const myBucket = 'bucket-name'
const myKey = 'file-name.pdf'
const signedUrlExpireSeconds = 60 * 5
const url = s3.getSignedUrl('getObject', {
Bucket: myBucket,
Key: myKey,
Expires: signedUrlExpireSeconds
})
console.log(url)
Die URL, die generiert wird, sieht folgendermaßen aus:
https://bucket-name.s3-us-west-2.amazonaws.com/file-name.pdf?AWSAccessKeyId=[access-key-omitted]&Expires=1470666057&Signature=[signature-omitted]
Ich kopiere diese URL in meinen Browser und erhalte die folgende Antwort:
<Error>
<Code>NoSuchBucket</Code>
<Message>The specified bucket does not exist</Message>
<BucketName>[bucket-name-omitted]</BucketName>
<RequestId>D1A358D276305A5C</RequestId>
<HostId>
bz2OxmZcEM2173kXEDbKIZrlX508qSv+CVydHz3w6FFPFwC0CtaCa/TqDQYDmHQdI1oMlc07wWk=
</HostId>
</Error>
Ich weiß, dass der Eimer existiert. Wenn ich über die AWS-Web-GUI zu diesem Element navigiere und darauf doppelklicke, wird das Objekt mit der URL geöffnet und funktioniert einwandfrei:
https://s3-us-west-2.amazonaws.com/[bucket-name-omitted]/[file-name-omitted].pdf?X-Amz-Date=20160808T141832Z&X-Amz-Expires=300&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=[signature-omitted]&X-Amz-Credential=ASIAJKXDBR5CW3XXF5VQ/20160808/us-west-2/s3/aws4_request&X-Amz-SignedHeaders=Host&x-amz-security-token=[really-long-key]
Daher muss ich glauben, dass ich mit der Verwendung des SDK etwas falsch machen muss.
NoSuchBucket
bedeutet, dass derhttps://>>>here<<<.s3-us-west-2.amazonaws.com
in der URL angezeigte Bucket-Name nicht vorhanden ist. Nichts in Ihrem Signaturprozess, Ihrer Richtlinie, Ihren Berechtigungen, Ihrem Schlüssel oder Ihrem Geheimnis kann diesen bestimmten Fehler erzeugen.new AWS.S3({ signatureVersion: 'v4' })
erzwingt die Signatur Version 4. Dies war eine Voraussetzung für mich mit einem SSE KMS-verschlüsselten Objekt.Antworten:
Dustin,
Ihr Code ist korrekt. Überprüfen Sie Folgendes:
Ihre Bucket-Zugriffsrichtlinie.
Ihre Bucket-Berechtigung über Ihren API-Schlüssel.
Ihr API-Schlüssel und Ihr Geheimnis.
Ihr Eimername und Schlüssel.
quelle
Ich hatte einen Anwendungsfall, in dem node.js verwendet wurde. Ich wollte ein Objekt von s3 abrufen und es an einen temporären Ort herunterladen und es dann als Anhang zum Drittanbieter-Service geben! So habe ich den Code gebrochen:
Es kann jedem helfen; wenn es den gleichen Anwendungsfall gibt; chekout unter link ; https://medium.com/@prateekgawarle183/fetch-file-from-aws-s3-using-pre-signed-url-and-store-it-into-local-system-879194bfdcf4
quelle
Versuchen Sie diese Funktion mit Versprechen.
quelle