Как часть моего приложения для Android, я хотел бы загрузить растровые изображения, которые будут храниться удаленно. У меня простая HTTP GET и POST-связь, работающая отлично, но документация о том, как делать многостраничную POST, кажется такой же редкой, как единороги.Android Multipart Загрузить
Кроме того, я хотел бы передать изображение непосредственно из памяти вместо работы с файлом. В приведенном ниже примере кода я получаю байтовый массив из файла, который будет использоваться позже с 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.
Кто-нибудь использует этот ByteArrayPartSource в Android, и как они его импортировали?
После того, как в документации и прочистите Интернет, я придумал что-то, что соответствует моим потребностям. Для того, чтобы сделать многослойный запрос, такими как форма 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's blog на этом.
Если кто-то ищет, чтобы разрешить импорт MultipartEntity. Проверьте это сообщение в блоге со ссылками на http: //blog.tacticalnuclearstrike jar.com/2010/01/using-multipartentity-in-android-applications/ – Blundell
Спасибо за это. У меня была такая же проблема. Кроме того, меня беспокоит то, что размер моего приложения в 3 или 4 раза больше. Интересно, может ли быть способ просто добавить поддержку multipart вместо загрузки 4 банок. –