質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

3回答

3311閲覧

GoogleCloudStorageにuploadしたファイルが表示されない。

chonbo2525

総合スコア233

Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2016/01/26 19:14

編集2022/01/12 10:55

お世話になっております。

現在ServletからGoogleCloudStorageへの画像アップロード処理を試しているのですが、
ファイルのアップロード自体は出来ているのですが、画像が壊れて?しまうようです。
手動でGCSのブラウザからアップロードしたファイルはServletからGETで表示させることはできています。

環境
Servlet: 2.5
GAE: 1.9.25
GCS Client Library: 0.5
Maven: 3.3.3

upload処理

java

1private String bucketName = AppIdentityServiceFactory.getAppIdentityService().getDefaultGcsBucketName(); 2private final GcsService gcsService = GcsServiceFactory.createGcsService(new RetryParams.Builder() 3 .initialRetryDelayMillis(10) 4 .retryMaxAttempts(10) 5 .totalRetryPeriodMillis(15000) 6 .build()); 7private static final int BUFFER_SIZE = 2 * 1024 * 1024; 8...//ServletのdoPost内 9GcsFilename filename = new GcsFilename(bucketName, directoryPath + "uploadfile.jpg"); 10GcsFileOptions options = new GcsFileOptions.Builder().acl("public-read").mimeType("image/jpeg").build(); 11try(OutputStream output = Channels.newOutputStream(outputChannel)) { 12 try (InputStream input = request.getInputStream()) { 13 byte[] buffer = new byte[BUFFER_SIZE]; 14 int bytesRead = input.read(buffer); 15 while (bytesRead != -1) { 16 output.write(buffer,0,bytesRead); 17 bytesRead = input.read(buffer); 18 } 19 } 20}

GCSブラウザのアップロード状況(一番下のuploadfile.jpgがアップロードしたファイルです)
GCSブラウザ

ファイルをクリックするとブラウザ上では左上に四角の枠みたいなのが表示されるだけです。
ブラウザ表示
と表示されます。

画像のアップロードテストは
curl アプリケーションURL -F file=@test.jpg
としています。

GcsFileOptions.BuilderでmimeTypeを設定しないとタイプがbinary/octet-stremとなります。
サイズやタイプは正常だと思うのですが、どうしてこのように表示されてしまうのでしょうか?
アップロードするには何か権限が必要なのでしょうか?
公開するためのチェックボックスも消えてしまいます。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

解決しました。
inputstreamがリクエスト全体になっていたことが原因だったようです。
ありがとうございました。

投稿2016/04/24 17:18

chonbo2525

総合スコア233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

解決しました。
inputstreamがリクエスト全体になっていたことが原因だったようです。
ありがとうございました。

投稿2016/01/28 06:13

chonbo2525

総合スコア233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

全くの素人なので、的外れだったらゴメンナサイ・・・

下記ページに記載されているサンプルと比べてみると

Google Cloud Storageに画像を保存して一般公開する方法

outputストリームをクローズする処理が漏れている様に見受けられますが、関係ないでしょうか?

つまり、ファイルのアップロード処理が完了していないためにアクセス出来ないのではないかと思うのですが。

投稿2016/01/28 01:37

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chonbo2525

2016/01/28 05:27

回答ありがとうございます。 サンプルの掲載ありがとうございます。 OutputStreamはtry-with-resource構文で自動closeされており、中身のchannelもcloseされているのを確認いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問