Android - 将大图像上传到服务器

时间:2011-02-09 05:18:05

标签: android

我正在尝试让我的应用程序使用以下代码将图像上传到网络服务器。它有时会起作用,但似乎也因内存错误而失败。如果文件大小很大,有人可以发一个如何实现这个的例子吗?另外,我正在构建它以支持1.5及更高版本。我不介意给我的代码是否在上传之前调整图像的大小。

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost(urlString);

File file = new File(nameOfFile);

FileInputStream fileInputStream = new FileInputStream(file);
InputStreamEntity reqEntity = new InputStreamEntity(fileInputStream, file.length());

httppost.setEntity(reqEntity);
reqEntity.setContentType("binary/octet-stream");
HttpResponse response = httpclient.execute(httppost);
HttpEntity responseEntity = response.getEntity();

if (responseEntity != null) {
    responseEntity.consumeContent();
}

httpclient.getConnectionManager().shutdown();

3 个答案:

答案 0 :(得分:1)

您有两个选项可以使代码可用。

  1. 您应该使用多部分方法上传更大尺寸的文件。我在我的代码中使用的。 Its Apache code。 (是的,您可以在Android项目中轻松移植它。)

  2. 您可以最小化图像分辨率。通过使用SampleSize标志, 关注this链接。

  3. 我希望它有所帮助。

答案 1 :(得分:1)

您可以尝试使用以下代码上传图片。

HttpClient httpClient = new DefaultHttpClient();

HttpPost httpPost = new HttpPost(url);

MultipartEntity multiPart = new MultipartEntity();
multiPart.addPart("my_picture", new FileBody(new File(IMG_URL)));

httpPost.setEntity(multiPart);
HttpResponse res = httpClient.execute(httpPost);

答案 2 :(得分:0)

你应该真正研究连接的setChunkedStreamingMode。或者,实际上,使用MultipartEntity(它的apache httpcomponents库 - 你很容易在此找到很多解决方案。

对于调整图像大小,这很简单:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2; // look at the link Rajnikant gave for more details on this
Bitmap bitmap = BitmapFactory.decodeFile(filename, options);
// here you save your bitmap to whatever you want

但也是内存消耗......