android - 如何使用 Retrofit Android 上传图片?

标签 android retrofit retrofit2

我有一个像这样使用 Retrofit 请求上传图片的功能

void uploadPhoto(File file) {
    RequestBody photo = RequestBody.create(MediaType.parse("application/image"), file);
    RequestBody body = new MultipartBuilder()
            .type(MultipartBuilder.FORM)
            .addFormDataPart("photo", file.getName(), photo)
            .build();

    fragment.showProgressDialog(fragment.loading);
    fragment.getApi().uploadPhoto(PrefHelper.getString(PrefKey.TOKEN), body)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(new Observer<GenericResponse>() {
                @Override
                public void onCompleted() {

                }

                @Override
                public void onError(Throwable e) {
                    fragment.dismissProgressDialog();
                    Timber.e(e.getMessage());
                }

                @Override
                public void onNext(GenericResponse response) {
                    fragment.dismissProgressDialog();

                    if (response.getCode() == 1) {
                        fragment.showSuccessDialog("Saving success", false);
                        userInfo();
                    }

                }
            });
}

例如,我的 fragment 中有一个上传图片的按钮

  @OnClick(R.id.btnChangePicture)
    void onChangePictureClicked() {

}

我应该输入什么代码

OnChangePictureClicked

这样我就可以从图库中选择一张图片,然后向 API 请求它。

void uploadPhoto(File file)

谢谢

最佳答案

将您的图像转换为字节数组,然后像下面的示例一样创建一个 Object Dto,并通过 Retrofit 将其发送到服务器。

@Data
public class SetProfileImageRequestDto {
    @SerializedName("Token")
    private String token;

    @SerializedName("Stream")
    private byte[] image;

改造 API 服务:

    @POST("SetProfileImage/")
    Observable<ResultResponseDto> setProfileImage(@Body SetProfileImageRequestDto profileImageRequestDto);

希望它有用。

关于android - 如何使用 Retrofit Android 上传图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42338130/

相关文章:

android - 使用多部分上传较大文件时改造套接字超时异常

java - Android改造设计模式

android - Retrofit with OKHttp 在离线时如何使用缓存数据

c# - android 改造使用 asp.net web api [FromBody] 始终为 null

java - 如何在 android 中正确实现插页式广告?

android - 为什么 Android WebView 拒绝用户输入?

android - Retrofit2.0 返回 404 not found

android - 无法使用 Retrofit 2 发布 JSON

android - 安装失败更新不兼容 : Package signatures do not match the previously installed version; ignoring

android - 方形按钮屏幕宽度和重量匹配