Http在android中发布高分辨率图像

时间:2012-12-08 09:12:41

标签: android bitmap stream http-post

我需要以最大分辨率(例如12mpx)从相机发布大图像。但是当我解码文件流以获取byteArrayInputStream来发布时,我经常得到OutOfMemoryError。有没有其他方式发布大图像?

P.S。我不需要显示或缩放此照片。

3 个答案:

答案 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);
}