Обновление 2 загрузки изображений с TypedFile - PullRequest
0 голосов
/ 24 октября 2018

Я использовал Retrofit 1.9 для загрузки изображения, например

TypedFile typedFile = new TypedFile("multipart/form-data", new File(ImagePath));

, и все работает нормально, теперь я должен использовать Retrofit 2 из-за требования кода ответа, поэтому я изменил код соответственно для этого ответа как

RequestBody filebody = RequestBody.create(MediaType.parse("image/*"), file);

Я передаю filebody вместе с другими параметрами для отправки запроса, поэтому все остальные значения отправляются правильно, но файл изображения не публикуется должным образом.

В обоих случаях нет изменений в API или коде на стороне сервера, поэтому мне любопытно узнать, нужно ли мне изменять код на стороне сервера или я что-то упускаю при написании кода клиента Android.

посмотрите на полный код

RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part filebody = MultipartBody.Part.createFormData("product_img", file.getName(), requestFile);

Call<AddProduct> call = service.sendEditProductRequest(name, filebody );

, а остальной интерфейс будет похож на

@Multipart
@POST(EDIT_PRODUCT)
Call<AddProduct> sendEditProfileRequest (            
            @Part("name") RequestBody name,
            @Part MultipartBody.Part filebody);

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Используйте следующий код:

public MultipartBody.Part get(@NonNull File file, @NonNull String key) {
    RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    return MultipartBody.Part.createFormData(key, filename, requestFile);
}

Подробнее: https://square.github.io/okhttp/3.x/okhttp/okhttp3/MultipartBody.Part.html

0 голосов
/ 24 октября 2018

Вы можете использовать приведенный ниже код для конвертации файла изображения и отправки с вашим запросом.

RequestBody requestFile =
        RequestBody.create(MediaType.parse("multipart/form-data"), file);

// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part body =
        MultipartBody.Part.createFormData("image", file.getName(), requestFile);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...