【问题标题】:Google Storage REST get with axios使用 axios 获取 Google Storage REST
【发布时间】:2022-06-12 19:39:31
【问题描述】:

我想使用 REST 和 axios 获取存储桶中的图像列表。

参考:https://cloud.google.com/storage/docs/listing-objects#list-objects-json

文档给出了这个 curl 请求

curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN" \
  "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o"

reqConfig:这是我在 REST firestore 查询中用来验证用户身份的令牌。我在这里使用相同的令牌。我猜这是问题所在,但不知道如何解决。

使用他们文档中的 URL,对于我知道存在的存储桶路径,我的结果始终为 404。我应该得到存储桶中文件的 json 列表。

错误:请求失败,状态码为 404

我哪里错了?

export async function getCompanyStorage(context, apikey, companyId) {
  const url = `https://storage.googleapis.com/storage/v1/b/uploads/${companyId}/o?key=${apikey}`;
  
  const cookies = nookies.get(context);

  const reqConfig = {
    headers: new Headers({
      Authorization: "Bearer " + cookies.token,
      "Content-Type": "application/json",
    }),
  };

  const result = axios
    .get(url, { headers: { Authorization: `Bearer ${reqConfig}` } })
    .then((res) => {
      return res.data;
    })
    .catch((error) => {
      console.error("error using axios", error);
    });
}

编辑:firebase 控制台中存储桶的路径如下所示

gs://projectname.appspot.com/uploads/WhmDZyQdLVk7n0qR7aTg

【问题讨论】:

  • 404 表示未找到。检查您的网址。我们看不到变量中的内容或存储桶的内容。您的问题应该说明您希望这段代码做什么,以及您正在使用的源数据。
  • @DougStevenson 我不太相信 404 的有效性,因为我使用的 URL 与他们的文档相同。

标签: rest oauth-2.0 axios google-cloud-storage


【解决方案1】:

我建议查看您链接到的文档。特别是:

  • OAUTH2_TOKEN 是您在第 1 步中生成的访问令牌。
  • BUCKET_NAME 是您要列出其对象的存储桶的名称。例如,我的桶。

您可以使用 prefix=PREFIX 查询字符串参数将结果限制为 具有指定前缀的对象。

您的 URL 不包含 URL 模式所要求的存储桶名称。使用您看到“BUCKET_NAME”的存储桶的唯一名称。以您的示例为例,它看起来像是“projectname.appspot.com”。 BUCKET_NAME 不是该存储桶中对象的路径。如果您想在“上传”前缀下列出文件,那么您可以使用 prefix 查询字符串参数来指定,如引用文本的最后一行所述。

【讨论】:

    【解决方案2】:

    您可以使用此功能通过 axios 为 Google Cloud Storage 创建 Get 请求

    export const UploadVideo = async (form_data, file, signedurl, asset_uuid) => {
        let resultState = { state: '', data: {} };
        console.log(signedurl)
    /*
        const xhr = new XMLHttpRequest();
        xhr.open("PUT", signedurl);
        xhr.setRequestHeader('Content-Type', "application/octet-stream");
        xhr.send(file);
    */
        let config = {
            headers: {
                'Content-Type': 'application/octet-stream',
            },
        };
    
        await axios.get(signedurl, file, config).then(function (response) {
            resultState.state = 'success';
        }).catch(function (error) {
            resultState.state = 'error';
            resultState.data.message = error.message;
            window.toastr.error(error.message);
    
            console.log(error)
        })
    
        return resultState;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2015-03-29
      • 1970-01-01
      • 2019-08-18
      • 2016-09-09
      相关资源
      最近更新 更多