Wie kann ich die SignedURL verwenden, die von der Go-API mit CORS zurückgegeben wird?CORS mit SignedURL
CURRENT SETUP:
Bucket Config
gsutil cors get gs://example-bucket
kehrt:
[{
"maxAgeSeconds": 1,
"method": ["GET", "HEAD", "PUT", "DELETE", "POST", "OPTIONS"],
"origin": ["http://example.com", "https://example.com", "http://localhost:4000"],
"responseHeader": ["Origin", "Accept", "X-Requested-With", "Authorization", "Content-Type", "Content-Length", "Accept-Encoding", "X-CSRF-Token"
]}]
Go-API-Aufruf
acc, _ := appengine.ServiceAccount(ctx)
signedUrl, err := storage.SignedURL(
"example-bucket",
fileName,
&storage.SignedURLOptions{
GoogleAccessID: acc,
SignBytes: func(b []byte) ([]byte, error) {
_, signedBytes, signingError := appengine.SignBytes(ctx, b)
return signedBytes, signingError
},
Method: "PUT",
ContentType: contentType,
Expires: time.Now().Add(1 * time.Hour),
})
JS XHR
Verwendet die SignedURL von Go, dh xhr.open("PUT", signedUrl);
EXTRA NOTES
Die SignedURL von der Go-API erzeugt wird, beginnt immer mit https://storage.googleapis.com/example-bucket/fileName
... anderswo Ich habe gelesen, dass es www.googleapis.com/storage
sein sollte, aber ich denke nicht, dass dies das Problem ist, sicherlich ist die URL, die von der offiziellen API zurückgegeben wird, co richtig.
Ich kann sehen, dass die Request-Header enthalten:
access-control-request-headers: content-type,x-upload-content-type
access-control-request-method: PUT
origin: http://localhost:4000
So scheint es, es, alle Felder der erforderlichen Header ticks off ...