我需要以最大分辨率(例如12mpx)从相机发布大图像。但是当我解码文件流以获取byteArrayInputStream来发布时,我经常得到OutOfMemoryError。有没有其他方式发布大图像?
P.S。我不需要显示或缩放此照片。
答案 0 :(得分:2)
是的,您可以通过MultipartEntity发布图片/文件,请在下面找到示例摘录:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
MultipartEntity entity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
File file= new File(filePath);
if(file.exists())
{
entity.addPart("data", new FileBody(file));
}
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
要使用多部分实体,您需要下载并将httpmime-4.1.2.jar添加到项目的构建路径中。
答案 1 :(得分:2)
如果您使用的android:largeHeap="true"
级别大于或等于API
11
的清单中使用此行
答案 2 :(得分:0)
如果可以以原始图像格式发布,则直接从文件流发送数据:
FileInputStream imageIputStream = new FileInputStream(image_file);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
OutputStream out = connection.getOutputStream();
copyStream(imageIputStream, out);
out.close();
imageIputStream.close();
copyStream函数:
static int copyStream(InputStream src, OutputStream dst) throws IOException
{
int read = 0;
int read_total = 0;
byte[] buf = new byte[1024 * 2];
while ((read = src.read(buf)) != -1)
{
read_total += read;
dst.write(buf, 0, read);
}
return (read_total);
}