Base64 文字列としてエンコードされた画像をアップロードするメソッドを使用して、変更できない REST サービスがあります。
問題は、画像のサイズが 5 ~ 10 MB、おそらくそれ以上になる可能性があることです。デバイスでこのサイズのイメージの Base64 表現を構築しようとすると、OutOfMemory 例外が発生します。
ただし、一度にバイトのチャンクをエンコードできます (たとえば 3000 としましょう) が、HttpGet/HttpPost オブジェクトを作成するには文字列全体が必要になるため、これは役に立ちません。
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("www.server.com/longString");
HttpResponse response = client.execute(httpGet);
これを回避する方法はありますか?
編集: Heiko Rupp の提案と android doc を使用しようとすると、次の行で例外 ("java.io.FileNotFoundException: http://www.google.com ") が発生します: InputStream in = urlConnection.getInputStream();
try {
URL url = new URL("http://www.google.com");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
out.write("/translate".getBytes());
InputStream in = urlConnection.getInputStream();
BufferedReader r = new BufferedReader(new InputStreamReader(in));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
System.out.println("response:" + total);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
何か不足していますか?実行する必要がある GET リクエストは次のようになります。「http://myRESTService.com/myMethod?params=LOOONG-String 」なので、http: //myRESTService.com/myMethodに接続して、一度に長い文字列の数文字。これは正しいです?