3

私はここで途方に暮れています。私のノード コードはファイルを gcloud Storage に正常にアップロードしましたが、ファイルを公開したり、ACL を変更したりすることさえできないようです。

実際には、ファイルは gcloud ストレージに書き込まれましたが、同じファイルを公開することはできません。

返されるエラーは

{ [ApiError: 不十分な権限] エラー: [ { ドメイン: 'global'、理由: 'insufficientPermissions'、メッセージ: '不十分な権限' } ]、コード: 403、メッセージ: '不十分な権限'、応答: 未定義 }

これが私のコードです(このコードはSTREAM ergo stdout.pipe内にあると仮定します)

var gcs = GLOBAL.gcloud.storage();
var bucket = gcs.bucket(GLOBAL.storage_names.products);
var file = bucket.file('images/'+targetValue+'_'+filename);
stdout.pipe(file.createWriteStream())
  .on('error', function(err) {
    var msg = {
      "status":"Error"
      "err":err
    };
    console.log(msg);

  })
  .on('finish', function() {
    // The file upload is complete.
    console.log("Successfully uploaded "+targetValue+'_'+filename);
    file.acl.add({
      entity: 'allUsers',
      role: gcs.acl.READER_ROLE
    }, function(err, aclObject) {

      if(err==null)
      {
        //stream upload file
        file.makePublic();
      }else{
        console.log("ERROR in ACL Adding");
        console.log(err)
      }

    });
    file.makePublic(function(err, apiResponse) {
      if(err==null)
      {
        console.log("File made public");
      }else{
        console.log("make public error");
        console.log(err);
      }
    });
  });
4

1 に答える 1

4

コードは問題を完全には示していませんが、これは役立つかもしれません: WRITERバケット権限はオブジェクトを作成できますが、既存のオブジェクトの ACL を変更するには OWNERオブジェクト権限が必要です。また、オブジェクトの作成者に OWNERオブジェクト権限が自動的に付与されるわけではありません (バケットの所有者であっても)。オブジェクトの作成時に事前定義された ACLを指定しない場合、Google Cloud Storage は常にバケットのデフォルトを適用します。 object ACLを新しく作成されたオブジェクトに追加します。

そのため、考えられる 2 つの修正方法は、(1) 事前にバケットにデフォルトのオブジェクトACL を設定して、アプリケーション資格情報を OWNER として含めるか、(2) オブジェクトの作成時に定義済みの ACL (「publicRead」など) を後で変更するのではなく提供することです。 .

于 2015-12-14T00:23:05.130 に答える