0

absolute minimalファイルをストレージ バケットにアップロードするための要件を探しています。そして必要最小限のコード。

私が持っている最小限の oAuth/API キー情報はconsole.cloud.google.com/apis/credentials/oauthclient/

  • clientId: 資格情報ページのクライアント ID。
  • apiKey: 資格情報ページからのクライアント シークレット?
  • scopes: ' https://www.googleapis.com/auth/devstorage.read_write ' (なぜ と呼ばれるdevstorageのですか?開発者のみを対象としているかのようにdevice?

apiKey が正しいかどうかはわかりませんが、例からこれを使用してもエラーはスローされません。

  // This is triggered after the `client.js` loads
  function handleClientLoad() {
    gapi.client.setApiKey(apiKey);
    window.setTimeout(checkAuth,1);
  }

  function checkAuth() {
    gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true}, handleAuthResult);
  }

これがステップ 1 ですが、間違っていたら訂正してください。

Auth Result を処理するには:

  function handleAuthResult(authResult) {
    if (authResult && !authResult.error) {
      makeApiCall();
    }
  }

ここで私はちょっと立ち往生しています、私が取り組んでいる例があります: https://developers.google.com/api-client-library/javascript/start/start-js

が定義されていないgapi.client.plus.people場所に到達すると、動作が停止します。peopleこれは、匿名ユーザーがいて、ある種の公開 API キーがあるためです。後でユーザーごとの ACL を実装しますが、今のところは動作/アップロードに必要なだけです。

今、私はAPI-key基本的にファイルとバケット名を入力するだけでよいファイルをアップロードできる単純なjQueryベースのウィジェットを使用して、Amazon Cloudで同様の作業をしています(PHP残念ながらそうでした)。

シンプルなだけで満足です<form>が、私が遭遇した例には、上記の 3 つの最小限のデータ (clientId、apiKey、スコープ) とバケットへの追加の URL (奇妙な暗号化された acl 文字列など) よりも多くの情報/フィールドが含まれています。

bucket-name.storage.googleapis.comそれがファイルの最終的な場所であり、画像を手動でアップロードするときに機能することを理解しています。

私は今、次のgoogle clientようなものを使用して、絶対に最小限のコード、できればjavascriptを探しています(別の例で見つけました):

gapi.client.request({
    'path': '/upload/storage/' + API_VERSION + '/b/' + BUCKET + '/o',
    'method': 'POST',
    'params': {'uploadType': 'media'}
    'headers': {
        'Content-Type': 'multipart/mixed; boundary="' + boundary + '"'
     }

必要API_VERSIONですか?どちらを使用するかを調べるにはどうすればよいpathですか? bucket名前は知ってるけどupload/storage/どこから来たの?そして/b/?(ただしhttps://cloud.google.com/storage/docs/json_api/v1/how-tos/uploadは必要であることを示しています) この例では a を含むヘッダーを使用しましたboundaryが、それについては何も見つかりません。それは必要ありません。minimally問題は、必要なヘッダーが見つからないことです。に遭遇'x-goog-acl': 'public-read'しましたが、これはヘッダーに含める必要がありますか?

要約すると、私が答えたい質問は次のとおりです。

  • allUsersアクセス権が設定されたバケットにアップロードするために最低限必要なヘッダーは何ですかOwner(私は知っていますが、最良のアイデアではありません。これは将来変更されます)
  • htmlフォームからファイルを取得する方法のサンプルコードajax。リクエストを送信するために使用するかgapi、それを行うためのものだと思います。

問題が明確であることを願っています。基本的に、正しいコード例をどこから開始/検索すればよいかわかりません。これは、Google JavaScript クライアント API がbeta..

4

1 に答える 1

3

allUsers アクセス権が所有者に設定されているバケットにアップロードするために最低限必要なヘッダーは何ですか (私は知っていますが、最良のアイデアではありません。これは将来変更されます)。

あなたは正しいです!これは良い考えではありません。匿名ユーザーがバケットを所有している場合、バケット内のオブジェクトを削除したり、既存のオブジェクトを上書きしたり、その他の方法で高価ないたずらをしたりできることを意味します。それにもかかわらず、あなたの質問への答え:

<form action="https://storage.googleapis.com/YOUR_BUCKET_NAME" 
      method="post" enctype="multipart/form-data">
  <input name="key" type="text" value="objectName.txt" /><br/>
  <input name="file" type="file" /><br/>
  <input type="submit" value="Upload!" />
</form>

これは、オブジェクトをアップロードするために必要な絶対最小値です。どこにもリダイレクトされないことに注意してください。そのためには、success_action_redirect パラメーターを使用する必要があり、絶対最小値を要求しました。

于 2016-02-25T01:24:30.690 に答える