Я делаю функцию изменения фотографии профиля с помощью Retrofit в Android Pie.
Так что мне удалось загрузить на сервер фотографии, сделанные камерой. Но я не знаю, как перенести фотографии, выбранные из галереи, на мой сервер. (Меня устраивает любой код на Java Kotlin.)
Я загружу видео позже.
Я много искал в Google, но мне было трудно получить нужную информацию.
Хорошо сделано в документе Google, но я не знаю, как это сделать. https://developer.android.com/guide/topics/providers/document-provider
Документ Google показывает примеры использования растрового изображения или потока ввода или чего-то еще.
Требуется ли мне растровое изображение или входной поток для загрузки фотографий с помощью Retrofit?
Мне действительно нужен действующий uri.
public void performFileSearch() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, PICTURES_DIR_ACCESS_REQUEST_CODE);
}
@Override
public void onActivityResult(int requestCode, int resultCode,Intent resultData) {
if (requestCode == READ_REQUEST_CODE && resultCode ==Activity.RESULT_OK) {
Uri uri = null;
if (resultData != null) {
uri = resultData.getData();
Log.i(TAG, "Uri: " + uri.toString());
showImage(uri);
}
}
}
public void Edit_Profile (String Image_Uri) {
File file = new File(Image_Uri);
RequestBody requestBody = RequestBody.create(file, MediaType.parse("image/*"));
MultipartBody.Part body = MultipartBody.Part.createFormData("uploaded_file", Num+ID+".jpg", requestBody);
}
Фактически, onActivityResult возвращает следующий тип uri.
content://com.android.providers.media.documents/document/image%3A191474
Поэтому, когда я пытаюсь отправить его на свой сервер, используя этот uri, я получаю ошибку FileNotFoundException.
InputStreamRequestBody
из второго фрагмента кода этого комментария к проблеме GitHub создатьRequestBody
дляUri
. - person CommonsWare   schedule 25.10.2019