2017-02-23 22 views
1

CurlとAPIキーを使用してGoogle Cloud Storageにアップロードしようとしていますが、成功することはありません。エラーメッセージは、私がContent-lengthヘッダーを持っていないことを示しています。何か案は?CurlとAPIキーを使用してGoogle Cloud Storageにアップロードするにはどうすればよいですか?

$ 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 

答えて

5

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' 
+0

ありがとう! '<?xml version = '1.0' encoding = 'UTF-8'?>InvalidArgument引数が無効です。

POSTオブジェクトはContent-Type multipart/form-dataを予期します
neu242

+1

どのようなcurlコマンドを使用していますか?あなたはPUTの代わりにPOSTをやっているようです。 –

+0

それはそれでした!私は何とかコマンドに '-X POST'をまだ持っていました。ありがとう。 – neu242

関連する問題