我正在尝试让我的应用程序使用以下代码将图像上传到网络服务器。它有时会起作用,但似乎也因内存错误而失败。如果文件大小很大,有人可以发一个如何实现这个的例子吗?另外,我正在构建它以支持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();
答案 0 :(得分:1)
您有两个选项可以使代码可用。
您应该使用多部分方法上传更大尺寸的文件。我在我的代码中使用的。 Its Apache code。 (是的,您可以在Android项目中轻松移植它。)
您可以最小化图像分辨率。通过使用SampleSize标志, 关注this链接。
我希望它有所帮助。
答案 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
但也是内存消耗......