Как часть моего приложения для 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.
Кто-нибудь использует этот 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 на этом.