Я только что создал для этого простое решение: 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);
РЕДАКТИРОВАТЬ:
Я рассмотрел ваш MultiPart с кодом подключения HttpURLC.Вы получаете проблему UTF-8 из-за использования DataOutputStream
.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());