良い一日の仲間の開発者。Androidポスト高解像度画像メモリ不足のため
私はアプリから画像をアップロードするためにアンドロイドに忙しいです。
私はそれも働いています(コードは以下に従います)。
しかし、大きな画像(10メガピクセル)を送信すると、アプリがメモリ不足の例外でクラッシュします。
これを解決するには圧縮を使用しますが、フルサイズの画像を送信する場合はどうすればよいですか?
私はおそらくストリームで何かと思うが、私はストリームと家族ではない。おそらくurlconnectionは役に立ちますが、私は本当に分かりません。
私は、ファイル名に名前のファイルを与える[0〜9999] .JPG 画像の日付とポストの値が、私は
作品が、私以下のコードdropboxidポスト値のUIDを与えるFILEDATA と呼ばれ、高解像度の画像を送信できないように私の問題を解決したいと考えています。 ByteArrayOutputStream
を使用して、あなたが効果的にが JPEGが使用しているメモリの量を倍増してきました#toByteArray()
を呼び出すとき
種類は
try
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100, bos);
byte[] data = bos.toByteArray();
HttpPost postRequest = new HttpPost(URL_SEND);
ByteArrayBody bab = new ByteArrayBody(data, "File" + pad(random.nextInt(9999) + 1) + ".jpg");
MultipartEntity reqEntity = new multipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("Filedata", bab);
reqEntity.addPart("dropboxId", new StringBody(URLEncoder.encode(uid)));
postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String sResponse;
StringBuilder s = new StringBuilder();
while((sResponse = reader.readLine()) != null)
{
s = s.append(sResponse);
}
if(d) Log.i(E, "Send response:\n" + s);
}
catch (Exception e)
{
if(d) Log.e(E, "Error while sending: " + e.getMessage());
return ERROR;
}
私は、ファイルへの参照のみを格納します。したがって、ファイルはすでに(sdカード上に)保存されています。私がアップロードを開始したときだけ、そこからビットマップを取得します。 私の主な問題は、そのファイルからinputstreamをどのように取得し、それを自分のエンティティで投稿できるoutputstreamに変換できるのか分かりません。ビットマップコード ビットマップ=ビットマップファクトリ。デコードファイル(パス) ここで私はByteArrayBody bab = fileinputstream(パス)のような何かをしなければならないのですか? – user1195015
だから、なぜあなたはビットマップをフェッチしますか?ソースファイルはPNGで、WebサーバーはPNGのみを受け入れますか?さもなければ、既に持っているファイルをアップロードするだけです.JPEGを再エンコードすると、画像に不自然なアーチファクトが発生する可能性が高くなります。 **編集**:Apacheのいくつかの追加のlibをインポートしましたか?その場合、 'FileBody'クラスが必要です。あなたはそれを使用することができます – Jens
私が好きなほとんどすべてのファイルタイプを送信することができます。しかし、私はまだファイルからバイトを取得する方法の手掛かりがありません。しかし、アイデアは良いので、私はgoogleに行くと思う。または、簡単な例があればそれはいいと思います。もし私が何かを見つけたら、私はそれを掲示するでしょう。アドバイスをありがとう – user1195015