0

私はこの問題で数日間苦労しており、あなたはそれを解決する最後のチャンスです.

目標:

Android クライアントから Google アプリ エンジンにビットマップをアップロードし、データストアに保存します。

  • シリアライゼーションを使用して、オブジェクトをクライアントからサーバーに、またはその逆に転送しています。

私が試したこと:

  • ビットマップの送信
    • しかし、私は得ましたjava.io.NotSerializableException: android.graphics.Bitmap
  • 次に、クライアントでビットマップ Blob から次のように作成しようとしました。

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
    Byte[] bArray = bos.toByteArray();
    Blob blob = new Blob(bArray); 
    

    しかし、クライアント側には Google アプリ エンジン クラス (Blob 用) がありません。そのため、特定のクラスを抽出してブルート フォースしようとしましたが、新しい問題が発生しました。

ですから、この問題を解決するためにどの方向に進むことができるかを尋ねています。
ありがとう。

4

3 に答える 3

3

いくつかのメモ:

  1. Java シリアライゼーションを使用して JVM 間でデータを転送しないでください。Java シリアライゼーションは標準化されておらず、JVM 間 (またはバージョン間でさえ) の互換性が保証されていません。

  2. バイナリ データを送信するには、HTTP POST を使用してContent-Type適切に設定することをお勧めします (例: application/octet-stream)。

したがって、これを機能させるには、次のようにします。

  1. POST を処理してバイナリ データを取得するサーブレットを作成します。バイナリデータを取得するために使用servletRequest.getInputStream()します。

  2. Blobstore FileService APIを使用してデータを blobstore に保存します。

  3. Android 側では、http クライアントを使用して POST リクエストを作成し、ビットマップのバイナリ データをそれに追加します。メタデータを追加する必要がある場合は、Http ヘッダーを使用します。

于 2012-05-16T18:14:00.523 に答える
0

これが本番テストされた方法です:

GAE appengineを使用して、ビットマップをにアップロードし、将来のクライアントに提供します。

Androidコードでは、次の手順に従います。

  1. GAEからアップロードURLを取得する
  2. ビットマップをGAEにアップロードし、ブロブキーを取り戻します
  3. 後で、ブロブキーを使用して画像をクライアントに提供します。

GAEサーブレットコード:

getUploadURL:

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
String url = blobstoreService.createUploadUrl(path_to_your_upload_servlet);

uploadServlet-blobstoreに保存し、blobkeyをアップローダーに返します

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<BlobKey>> uploads = blobstoreService.getUploads(request);
String fileName = uploads.keySet().iterator().next();
final BlobKey blobKey = uploads.get(fileName).get(0);
response.getWriter().println(blobKey.getKeyString());

Androidクライアントコード

String uploadUrl = getUrlAsString(..your getUrl servlet path...)
// Upload to GAE (include apache-mime4j.jar and httpmime.jar in your project for this code)
File file = new File(imageFilePath);
HttpPost postRequest = new HttpPost(uploadUrl);
MultipartEntity entity = new MultipartEntity();
entity.addPart("file", new FileBody(file));
postRequest.setEntity(entity);
HttpResponse httpResponse;
HttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setBooleanParameter("http.protocol.handle-redirects",false);

httpResponse = httpClient.execute(postRequest);
int status = httpResponse.getStatusLine().getStatusCode();
String blobKey = getInputStreamAsString(httpResponse.getEntity().getContent())
于 2012-05-16T18:16:17.823 に答える
0

これは役に立つかもしれません

Google App Engine (Java) で画像をアップロードして保存する方法

または、blobstore api を試すこともできます

http://code.google.com/appengine/docs/java/blobstore/overview.html

于 2012-05-16T17:42:48.107 に答える