作为我的 Android 应用程序的一部分,我想上传位图以远程存储。我有简单的 HTTP GET 和 POST 通信完美地工作,但是关于如何进行多部分 POST 的文档似乎和独角兽一样罕见。
此外,我想直接从内存中传输图像,而不是使用文件。在下面的示例代码中,我从文件中获取了一个字节数组,以便稍后与 HttpClient 和 MultipartEntity 一起使用。
File input = new File("climb.jpg");
byte[] data = new byte[(int)input.length()];
FileInputStream fis = new FileInputStream(input);
fis.read(data);
ByteArrayPartSource baps = new ByteArrayPartSource(input.getName(), data);
这一切对我来说似乎都很清楚,除了我一生都无法找到从哪里获得这个 ByteArrayPartSource。我已经链接到 httpclient 和 httpmime JAR 文件,但没有骰子。我听说 HttpClient 3.x 和 4.x 之间的包结构发生了巨大变化。
有没有人在 Android 中使用这个 ByteArrayPartSource,他们是如何导入它的?
在搜索文档并搜索 Internet 之后,我想出了一些适合我需要的东西。要发出诸如表单 POST 之类的多部分请求,以下代码对我有用:
File input = new File("climb.jpg");
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://localhost:3000/routes");
MultipartEntity multi = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
String line;
multi.addPart("name", new StringBody("test"));
multi.addPart("grade", new StringBody("test"));
multi.addPart("quality", new StringBody("test"));
multi.addPart("latitude", new StringBody("40.74"));
multi.addPart("longitude", new StringBody("40.74"));
multi.addPart("photo", new FileBody(input));
post.setEntity(multi);
HttpResponse resp = client.execute(post);
HTTPMultipartMode.BROWSER_COMPATIBLE 位非常重要。感谢Radomir关于这个的博客。