如何使用Curl和API密钥上传到Google云端存储?

neu*_*242 10 post curl http google-cloud-storage

我正在尝试使用Curl和API密钥上传到Google云端存储,但没有成功.错误消息似乎表明我缺少Content-length标头,但我没有.有任何想法吗?

$ curl -v -T ./myfile -X POST https://storage.googleapis.com/my-app/my-bucket/myfile?key=<my-api-token>
> Host: storage.googleapis.com
> User-Agent: curl/7.51.0
> Accept: */*
> Content-Length: 4
> Expect: 100-continue
> 
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 411 Length Required
< Date: Thu, 23 Feb 2017 13:46:59 GMT
< Content-Type: text/html; charset=UTF-8
< Server: UploadServer
< Content-Length: 1564
< Alt-Svc: quic=":443"; ma=2592000; v="36,35,34"
< Connection: close
< 
<!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
  <title>Error 411 (Length Required)!!1</title>
  <style>
    [snip snip]
  </style>
  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
  <p><b>411.</b> <ins>That’s an error.</ins>
  <p>POST requests require a <code>Content-length</code> header.  <ins>That’s all we know.</ins>
* Curl_http_done: called premature == 0
* Closing connection 0
Run Code Online (Sandbox Code Playgroud)

Bra*_*ugh 18

API密钥不提供身份验证.出于配额和其他一些目的,它们将呼叫与项目相关联,但您无法使用它们来访问除匿名访问之外的任何资源.

你需要的是一个"访问密钥",可以通过各种方式获取,通常是通过OAuth交换.如果gcloud安装了该命令,则获取与cURL一起使用的快速访问密钥的最简单方法是运行gcloud auth print-access-token.以下应该有效:

$> curl -v --upload-file my-file.txt \
    -H "Authorization: Bearer `gcloud auth print-access-token`" \ 
    'https://storage.googleapis.com/my-bucket/my-file.txt'
Run Code Online (Sandbox Code Playgroud)