使用javascript上传到谷歌云存储签名url

使用javascript上传到谷歌云存储签名url,javascript,google-cloud-storage,google-api-client,Javascript,Google Cloud Storage,Google Api Client,通过下面的代码,我可以上传到我在谷歌云存储中的公共可写存储桶中。(allUsers具有写入权限)。但是,如果bucket不可公开写入,则会出现401未经授权的错误。(我不希望bucket可以公开写入) 是否可以将签名URL与gapi javascript客户端一起使用?或者它不理解参数 如果没有-是否有使用javascript中的JSON api进行CORS的例子,用于上传带有签名的URL (让我们假设我的到期日、GoogleAccessId和签名是正确的,并且与我在javascript中的操作

通过下面的代码,我可以上传到我在谷歌云存储中的公共可写存储桶中。(allUsers具有写入权限)。但是,如果bucket不可公开写入,则会出现401未经授权的错误。(我不希望bucket可以公开写入)

是否可以将签名URL与gapi javascript客户端一起使用?或者它不理解参数

如果没有-是否有使用javascript中的JSON api进行CORS的例子,用于上传带有签名的URL

(让我们假设我的到期日、GoogleAccessId和签名是正确的,并且与我在javascript中的操作和我在bucket上设置的权限相匹配)


基本上,有没有从本地主机从javascript客户端上传到google云存储的例子,而不要求用户拥有google帐户&不使用公开可写的bucket,而是使用分发的签名URL?

使用
https://storage.googleapis.com
作为主机,组成指向所需URL的URL资源。您可以选择几种方法来构建基本URL。有一些可能的组合

作为参考,您还可以查看可能会有所帮助的内容


希望能有所帮助。

我也在实施同样的问题。问题在于SignedURL。更正签名后,上传效果很好

当我使用php时。下面是生成签名URL的代码

private function createSignedUrl($objectName, $bucketName, $key, $serviceEmailAddress, $method = 'GET', $duration = 600)
{
    $expires = time() + $duration;

// Line breaks are important!
$toSign = (
    $method . "\n" .
    /* Content-MD5 */ "\n" .
    /* Content Type */ "\n" .
    $expires . "\n" .
    $objectName
);
$signature = urlencode(base64_encode(JWT::encode($toSign, $key, 'HS256')));
return array(
    'expires' => $expires,
    'accessid' => $serviceEmailAddress,
    'signature' => $signature,
);
}

嗨,罗伯特,我一直在找同样的东西。你最终做到了吗?我想我放弃了,尝试了其他方法,然后我发现我的签名url一直都是错误的-所以如果我正确地签名url,它可能会起作用。你可以使用gcutil来创建一个正确的url,然后再试一次。我确实是用gsutil生成的,但是你不能用/upload/storage/v1,你必须发送一个PUT请求,但由于公司的政策,该请求失败了,所以我放弃了,只是暂时公开了这个bucket。好吧,我只是使用了angulars$http方法。(不得不为我的bucket上传一个CORS.json文件——我想我可能已经使用了PUT或POST)这仍然有效吗?我让它在1.0版中工作,但升级到2.0版并尝试迁移后,它不再工作。我基本上就是这样做的
private function createSignedUrl($objectName, $bucketName, $key, $serviceEmailAddress, $method = 'GET', $duration = 600)
{
    $expires = time() + $duration;

// Line breaks are important!
$toSign = (
    $method . "\n" .
    /* Content-MD5 */ "\n" .
    /* Content Type */ "\n" .
    $expires . "\n" .
    $objectName
);
$signature = urlencode(base64_encode(JWT::encode($toSign, $key, 'HS256')));
return array(
    'expires' => $expires,
    'accessid' => $serviceEmailAddress,
    'signature' => $signature,
);
}