byte[] 形式で画像を受け取る Google アプリ エンジンでサーブレットを実行しています。POST リクエストを使用して、この画像を Google クラウド ストレージに保存したいと考えています。
ここでアイデアを得るには、機能していないが正しい方向にあるコードがあります。
public void postReq( byte[] image) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(getUploadUrl());
FileBody uploadFilePart = new FileBody(?????, "image/jpg");
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("upload-file", uploadFilePart);
httpPost.setEntity(reqEntity);
HttpResponse response = httpclient.execute(httpPost);
}
public String getUploadUrl() {
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
UploadOptions uploadOptions = null;
String bucket = Constants.BUCKET_NAME;
uploadOptions = UploadOptions.Builder.withGoogleStorageBucketName(bucket);
return blobstoreService.createUploadUrl("/upload", uploadOptions);
}
org.apache.http.impl.client.DefaultHttpClient; は推奨されていないため、明らかに正しい方法ではありません。インターネットで見つけたものの、実行できなかったもの: http://knowledge-serve.blogspot.com/2012/09/upload-file-on-google-cloud-storage.html ファイルのアップロード - java.net.URLConnection を使用して HTTP 要求を起動および処理する
Google はいくつかの非常に優れたチュートリアルを作成しましたが、html ページから画像をアップロードするためのものです: https://developers.google.com/cloud/samples/photofeed/servephotos
目標は、Google に multipart/data を送信する POST リクエストを作成し、Google がリクエストを GAE サーブレット (この場合は "/upload") に返すことです。したがって、これと同じことを行う必要がありますが、サーブレットと byte[] イメージから:
<form action="<%=serviceManager.getUploadUrl()%>" method="post" enctype="multipart/form-data">
<input id="input-file" class="inactive file btn" type="file" name="photo" onchange="onFileSelected()">
<textarea name="title" placeholder="Write a description"></textarea>
<input id="btn-post" class="active btn" type="submit" value="Post">
<a class="cancel" onclick="togglePhotoPost(false)">Cancel</a>
</form>