お世話になっております。
現在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がアップロードしたファイルです)
ファイルをクリックするとブラウザ上では左上に四角の枠みたいなのが表示されるだけです。
と表示されます。
画像のアップロードテストは
curl アプリケーションURL -F file=@test.jpg
としています。
GcsFileOptions.BuilderでmimeTypeを設定しないとタイプがbinary/octet-stremとなります。
サイズやタイプは正常だと思うのですが、どうしてこのように表示されてしまうのでしょうか?
アップロードするには何か権限が必要なのでしょうか?
公開するためのチェックボックスも消えてしまいます。
宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。