Как использовать Retrofit для загрузки файла с помощью http put - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь загрузить файл с помощью метода HTTP PUT,
Я попытался с OkHttp успешно, но потерпел неудачу с Retrofit.

Вот мои коды: static final String MEDIA_TYPE = «изображение / JPEG»

// file is  a file path

RequestBody requestBody = getRequestBody(file);

OkHttpClient client = getOkHttpClient();
Request request = new Request.Builder()
        .url(url)
        .put(requestBody)
        .build();

okhttp3.Response response = response = client.newCall(request).execute();

private RequestBody getRequestBody(String filePath) {
    MediaType contentType = MediaType.parse(MEDIA_TYPE);
    return RequestBody.create(contentType, new File(filePath));
}

Код, указанный выше, выполнен успешно.

Что эквивалентно Retrofit?

Я попытался и потерпел неудачу: открытый интерфейс UploadFileService { Строка CONTENT_TYPE = "image / jpeg";

/** base url, just for Retrofit usage demand. */
String BASE_URL = "https://not.used.net/";

/** Must be consistent with the following uploadFile annotation. */
String UPLOAD_FILE_HTTP_METHOD = "PUT";

@Multipart
@Headers("Content-Type:" + CONTENT_TYPE)
@PUT()
Observable<Response<MinaResponse<LocalAlbum.DummyResponse>>> uploadFile(@Url String url, @Part RequestBody fileBody);

}

1 Ответ

0 голосов
/ 05 марта 2019

Удалить аннотацию Multipart и применить тело к fileBody, Мне удалось!

@Headers("Content-Type:" + CONTENT_TYPE)
@PUT()
Observable<Response<MinaResponse<LocalAlbum.DummyResponse>>> uploadFile(@Url String url, @Body RequestBody fileBody);
...