我刚刚为此创建了一个简单的解决方案:android_multipart_entity。
它是免费的(包括用于商业用途),但是如果可能的话,请在我的课程中保留对我的引用。
它旨在与内置的 Android HttpClient 一起使用。示例使用代码:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.yourhost.com");
MultipartEntity entity = new MultipartEntity();
entity.addPart(new StringPart("name", "yourname"));
File imageFile = // .. get your image file
entity.addPart(new FilePart("picture", imageFile, null, "image/jpeg"));
httppost.setEntity(entity);
HttpResponse httpResponse = httpclient.execute(httppost);
编辑:
我使用 HttpURLConnection 代码查看了您的 MultiPart。由于 DataOutputStream 的使用,您会遇到 UTF-8 问题。 API 对那个类说:
包装现有的 OutputStream 并向其写入 big-endian 类型的数据。通常,此流可以被 DataInputStream 读入。
这个课程不适合你的需要。为了读取数据,您必须在另一端直接使用 DataInputStream。
所以我的建议是使用普通的OutputStream。并向其写入字节。像这样的:
outputStream.write(partSeparator.getBytes());
outputStream.write(("Content-Disposition: form-data; name=\"" + parameter.getKey() + "\"" + lineEnd).getBytes());
outputStream.write(("Content-Type: text/plain; charset=UTF-8" + lineEnd).getBytes());
outputStream.write(("Content-Transfer-Encoding: 8bit" + lineEnd).getBytes());
outputStream.write(lineEnd.getBytes());
outputStream.write(parameter.getValue().getBytes("UTF-8")); // <= this is it!
outputStream.write(lineEnd.getBytes());
outputStream.write(partSeparator.getBytes());