Как перевести документ в формат multipart/form-data?
Столкнулся с такой проблемой: при работе с VK API, чтобы получить ссылку для загрузки фото в сам ВК, есть метод VKApi.uploadWallPhotoRequest(), который возвращает мне ссылку для загрузки.
НО. Такого метода нет для документов, видеозаписей и аудиозаписей. В документации нашёл это (см. скрин)
Так я получаю документы из памяти устройства:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(Intent.createChooser(intent, getString(R.string.AddPicture)), SELECT_IMAGE);
@SuppressLint("RestrictedApi")
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && null != data) {
if (requestCode == SELECT_IMAGE) {
Uri docsUri = data.getData();
// Дальше работаю с фотками норм
}
}
}
Это пример для фото. С документами действую аналогично. Как после того, как я получил документ перевести его в multipart/form-data? Спасибо:)
Ответы (2 шт):
Насколько я знаю не нужно ничего переводить. Посмотрите тут!. Здесь есть пример как загрузить файл и там multipart/form-data идет просто как свойство(property) запроса.
Вот основная часть запроса:
URL url = new URL(requestURL);
httpConn = (HttpURLConnection) url.openConnection();
httpConn.setUseCaches(false);
httpConn.setDoOutput(true); // indicates POST method
httpConn.setDoInput(true);
httpConn.setRequestProperty("Content-Type",
"multipart/form-data; boundary=" + boundary);
httpConn.setRequestProperty("User-Agent", "CodeJava Agent");
httpConn.setRequestProperty("Test", "Bonjour");
outputStream = httpConn.getOutputStream();
writer = new PrintWriter(new OutputStreamWriter(outputStream, charset),
true);
Есть вариант по проще. Просто используйте одну из библиотек: https://github.com/VKCOM/vk-java-sdk/blob/master/README.md
https://github.com/VKCOM/vk-android-sdk/blob/master/README.md
Тогда например код для загрузки фото будет выглядеть так:
PhotoUpload serverResponse =
vk.photos().getWallUploadServer(actor).execute();
WallUploadResponse uploadResponse = vk.upload().photoWall(serverResponse.getUploadUrl(), file).execute();
List<Photo> photoList = vk.photos().saveWallPhoto(actor, uploadResponse.getPhoto())
.server(uploadResponse.getServer())
.hash(uploadResponse.getHash())
.execute();
Photo photo = photoList.get(0);
String attachId = "photo" +
photo.getOwnerId() + "_" + photo.getId();
GetResponse getResponse = vk.wall().post(actor)
.attachments(attachId)
.execute();
