Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 为什么谷歌云存储总是回答cors错误:否';访问控制允许原点';请求的资源上存在标头_Google Cloud Platform_Google Cloud Storage - Fatal编程技术网

Google cloud platform 为什么谷歌云存储总是回答cors错误:否';访问控制允许原点';请求的资源上存在标头

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

我正在尝试从客户端浏览器将文件上传到谷歌云存储(GCS)。为此,我在node.js中有一个后端请求从GCS发送一个签名URL,然后将其传输到前端客户端以上载文件。签名的URL请求代码如下所示:

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]

中的文件,无论我做什么,我仍然看到这个问题。无论我做什么,我仍然看到这个问题。