2

ここに公開バケットがあります: http://storage.googleapis.com/tripket1/

そして、このバケット内のすべてのファイルには、ACL が「public-read」に設定されています。それでも、次のようなファイルを表示しようとすると:

http://storage.googleapis.com/tripket1/2013-05-25%2019.17.32_150.jpg

「NoSuchKey」エラーを返します。

<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
</Error>

この問題の原因は何ですか? これらのファイルは、Java 用 GCS クライアント ライブラリを使用してアップロードされました。アップローダーから抜粋したコードは次のとおりです。

GcsFilename thumbGcsFilename = new GcsFilename(bucketName, thumb_filename);
GcsFileOptions options = new GcsFileOptions.Builder().mimeType("image/" + photo_extension).acl("public-read").build();
GcsOutputChannel outputChannel = gcsService.createOrReplace(thumbGcsFilename, options);
outputChannel.write(ByteBuffer.wrap(newImageData));
outputChannel.close(); 
LOGGER.info("Wrote file");

String thumb_url_str = String.format("http://storage.googleapis.com/%s/%s", bucketName, thumb_filename);
return thumb_url_str;
4

2 に答える 2

3

%オブジェクト名の文字をエスケープする必要があります。

たとえば、次のオブジェクトがあります。

gs://tripket1/2013-05-25%2019.17.32_150.jpg

オブジェクトの名前にはパーセント記号がそのまま含まれ%25ているため、URL エンコードの場合と同様にエスケープする必要があるため、次の URL でオブジェクトにアクセスできます。

http://storage.googleapis.com/tripket1/2013-05-25%252019.17.32_150.jpg

エスケープしないと、%20オブジェクト名の がサーバー側でデコードされるときにスペース ( ) に変換され、スペースを含むオブジェクト名が見つかりません。

于 2013-09-17T15:41:27.693 に答える
0

これはパブリックに読み取り可能なバケットであるため、gsutil を使用してその内容を確認しました。読み込もうとしているオブジェクトが呼び出されていることがわかります。

2013-05-25%2019.17.32_150.jpg

それよりも

06b78005-4ad8-43d6-8fc5-bab867b653af/2013-05-25%2019.17.32_150.jpg

于 2013-09-17T12:31:53.960 に答える