SignatureDoesNotMatch Ruby Rails Google 存储签名 URL
SignatureDoesNotMatch Ruby on Rails Google Storage Signed URL
我已使用 gem 'google-cloud-storage' 与 Google 存储建立连接。回购是 https://github.com/GoogleCloudPlatform/google-cloud-ruby/tree/master/google-cloud-storage.
signed_url 方法的示例我无法在 repo 的一个示例中找到它,这里是第 916 行:
https://github.com/GoogleCloudPlatform/google-cloud-ruby/blob/master/google-cloud-storage/lib/google/cloud/storage/bucket.rb
我设法为特定文件的 GET 方法获得了签名 URL,但是当我尝试对文件的 signed_url 执行 PUT 时,它会给我一个像这样的响应主体:
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.</Message>
<StringToSign>PUT
application/x-www-form-urlencoded
1523909074
/bucket_name/logo1</StringToSign>
</Error>
PUT 示例代码(不工作):
require 'google/cloud/storage'
storage = Google::Cloud::Storage.new(
project_id: 'projectId',
credentials: './config/keyfile.json'
)
bucket = storage.bucket 'bucket_name'
signed_url = bucket.signed_url 'logo1.png',
method: 'PUT',
content_type: 'image/png',
expires: 300 # 5 minutes from now
我尝试过使用和不使用 content_type。我也试过 content_type: '*' 或 '**' 或 'image/*' 或 ''。
我在 Postman 和使用 primeng 上传组件的 Angular 应用程序中尝试了 PUT 请求。
需要一点帮助。谢谢。
一切都很好。我忘记在请求的 header 中添加 Content-Type。
我以为它隐含在签名url中,但没有。
我已使用 gem 'google-cloud-storage' 与 Google 存储建立连接。回购是 https://github.com/GoogleCloudPlatform/google-cloud-ruby/tree/master/google-cloud-storage.
signed_url 方法的示例我无法在 repo 的一个示例中找到它,这里是第 916 行: https://github.com/GoogleCloudPlatform/google-cloud-ruby/blob/master/google-cloud-storage/lib/google/cloud/storage/bucket.rb
我设法为特定文件的 GET 方法获得了签名 URL,但是当我尝试对文件的 signed_url 执行 PUT 时,它会给我一个像这样的响应主体:
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.</Message>
<StringToSign>PUT
application/x-www-form-urlencoded
1523909074
/bucket_name/logo1</StringToSign>
</Error>
PUT 示例代码(不工作):
require 'google/cloud/storage'
storage = Google::Cloud::Storage.new(
project_id: 'projectId',
credentials: './config/keyfile.json'
)
bucket = storage.bucket 'bucket_name'
signed_url = bucket.signed_url 'logo1.png',
method: 'PUT',
content_type: 'image/png',
expires: 300 # 5 minutes from now
我尝试过使用和不使用 content_type。我也试过 content_type: '*' 或 '**' 或 'image/*' 或 ''。 我在 Postman 和使用 primeng 上传组件的 Angular 应用程序中尝试了 PUT 请求。 需要一点帮助。谢谢。
一切都很好。我忘记在请求的 header 中添加 Content-Type。 我以为它隐含在签名url中,但没有。