Google cloud platform 为什么谷歌云存储总是回答cors错误:否';访问控制允许原点';请求的资源上存在标头
我正在尝试从客户端浏览器将文件上传到谷歌云存储(GCS)。为此,我在node.js中有一个后端请求从GCS发送一个签名URL,然后将其传输到前端客户端以上载文件。签名的URL请求代码如下所示:Google cloud platform 为什么谷歌云存储总是回答cors错误:否';访问控制允许原点';请求的资源上存在标头,google-cloud-platform,google-cloud-storage,Google Cloud Platform,Google Cloud Storage,我正在尝试从客户端浏览器将文件上传到谷歌云存储(GCS)。为此,我在node.js中有一个后端请求从GCS发送一个签名URL,然后将其传输到前端客户端以上载文件。签名的URL请求代码如下所示: const options = { version: "v4", action: "write", expires: Date.now() + 15 * 60 * 1000, // 15 minutes contentType: co
const options = {
version: "v4",
action: "write",
expires: Date.now() + 15 * 60 * 1000, // 15 minutes
contentType: content_type,
};
// Get a v4 signed URL for uploading file
const [url] = await storage
.bucket(bucketName)
.file(filename)
.getSignedUrl(options)
var data = new FormData()
data.append('file', event.target.files[0])
这是有效的。当我尝试在客户端上使用已签名的URL时,问题就出现了。每个请求最终都会出现以下错误:
访问位于的XMLHttpRequest'https://storage.googleapis.com/deploynets_models/keras_logo.png?X-Goog Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=urlsigner%40deploynets.iam.gserviceaccount.com%2F2000711%2FATOR%2Fstorage%2Fgoog4_请求&X-Goog-Date=20200711T192805Z&X-Goog-Expires=900&X-Goog-SignedHeaders=内容类型%3Bhost&X-Goog-Signature=82B73435E4759E575E5E5E5E77E9E38056C7C69167FDAAC5F0F45081AC616034B4830A7661B1BD0951A82BF749A35DC1CF9A8493B761F8993127D53948551D7B33F552D118666DCF8F67F494CFAABF2268D7235E955E1243CE3CD453DCC32552677168AD94C6F1FCA0032EB57941A806CC14139915E3CD3EFC3585497715A8AD32A10278F2E11672951AE0735F6794CFAABF2268D7235E955E955E955E955E955E1243CE3CD453DCC32552677168AD946CFC1418CFC1418CF14139918CFC283647CFC2737B2737F2737F2737F2737F2737F2737F2737F2737CFC2737F2737F2737F2737CFEFF8E2D348E09A8C213A93C0532F6FED167CD9CF3480415C0C35987B27ABD03684E088682EB5E89008D33DCBF630B58EA6B86E7D7F6574466AA2DAA982566“从原产地”http://localhost:3000'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头
我使用以下JSON在GCS存储桶上设置了CORS策略:
[
{
"origin": ["*"],
"method": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
"responseHeader": ["*"],
"maxAgeSeconds": 120
}
]
(我还试着将源代码具体列为http://localhost:3000 (例如)
应该提到的是,我已经让它在一个特定的情况下工作:当上传负载只是一个普通的字符串时。出于某种原因,它可以正常工作
我在网上查到了所有类似的错误,但到目前为止都没有用。有什么想法吗?我发现了问题所在。在上传代码(浏览器端)中,我传递了一个
FormData
对象作为要上传的数据,由于某种原因触发了上面的CORS错误。当我直接传递文件时,我修复了它
因此,不要使用以下方法:
const options = {
version: "v4",
action: "write",
expires: Date.now() + 15 * 60 * 1000, // 15 minutes
contentType: content_type,
};
// Get a v4 signed URL for uploading file
const [url] = await storage
.bucket(bucketName)
.file(filename)
.getSignedUrl(options)
var data = new FormData()
data.append('file', event.target.files[0])
我直接使用
event.target.files[0]
中的文件,我找出了问题所在。在上传代码(浏览器端)中,我传递了一个FormData
对象作为要上传的数据,由于某种原因触发了上面的CORS错误。当我直接传递文件时,我修复了它
因此,不要使用以下方法:
const options = {
version: "v4",
action: "write",
expires: Date.now() + 15 * 60 * 1000, // 15 minutes
contentType: content_type,
};
// Get a v4 signed URL for uploading file
const [url] = await storage
.bucket(bucketName)
.file(filename)
.getSignedUrl(options)
var data = new FormData()
data.append('file', event.target.files[0])
我直接使用
event.target.files[0]
中的文件,无论我做什么,我仍然看到这个问题。无论我做什么,我仍然看到这个问题。