android - 改造 2 : send files with json object

标签 android json web-services retrofit retrofit2

我在请求正文中发送对象,类似这样:

{
  "title":"test",
  "description":"test",
  "images":[]
}

@POST("create-data")
Call<JsonObject> publishData(@Body MyObject object);

没有图像也能正常工作。从文档中我可以找到如何使用 MultipartBody.Part 将文件上传到服务器,我的问题是:

  1. 如何同时上传多张图片?
  2. 是否可以发送对象内部的图像,或者我需要单独发送,如何发送?

非常感谢。

最佳答案

刚才向服务器请求成功

我引用了文章:

https://futurestud.io/blog/retrofit-2-how-to-upload-files-to-server


@Multipart
@POST("uploadHeadPic")
Call<UploadHeadPicResponseModel> uploadHeadPic(@Part MultipartBody.Part file, @Part("json") RequestBody json);

public void doUploadHeadPic(@NonNull String filePath) {
    if (!MNetworkUtil.isNetworkAvailable()) {
        MToastUtil.show("网络不能连接");
        return;
    }
    File file = new File(filePath);
    String json = new Gson().toJson(new UploadHeadPicRequestModel());
    if (!file.exists()) {
        MToastUtil.show("文件不存在");
        return;
    }

    progressDialog.show();
    avatarSimpleDraweeView.setEnabled(false);

    MApiManager.getService().uploadHeadPic(
            MultipartBody.Part.createFormData("file", file.getName(), RequestBody.create(MediaType.parse("multipart/form-data"), file)),
            RequestBody.create(MediaType.parse("multipart/form-data"), json))
            .enqueue(new OnRetrofitCallbackListener<UploadHeadPicResponseModel>(mActivity) {
                @Override
                public void onSuccess(UploadHeadPicResponseModel responseModel) {
                    progressDialog.dismiss();
                    avatarSimpleDraweeView.setEnabled(true);
                    if (responseModel != null) {
                        String serverAvatarUrl = responseModel.data.headPicPath;
                        if (!TextUtils.isEmpty(serverAvatarUrl)) {
                            UserModel userModel = MUserManager.getInstance().getUser();
                            if (userModel != null) {
                                userModel.setAvatarUrl(serverAvatarUrl);
                                MUserManager.getInstance().updateOrInsertUserInfo(userModel);
                                MToastUtil.show("上传头像成功");
                            }
                        }
                    }
                }

                @Override
                public void onFailure(int status, String failureMsg) {
                    progressDialog.dismiss();
                    avatarSimpleDraweeView.setEnabled(true);
                    MToastUtil.show((TextUtils.isEmpty(failureMsg) ? "上传失败" : failureMsg) + " : " + status);
                }
            });
}

多文件更新

可能这会有所帮助,我没试过


@Multipart
@POST("uploadHeadPic")
Call<UploadHeadPicResponseModel> uploadHeadPic(@Part MultipartBody.Part file0, @Part MultipartBody.Part file1, @Part("json") RequestBody json);


public void doUploadHeadPic(@NonNull String filePath) {
    MApiManager.getService().uploadHeadPic(
            MultipartBody.Part.createFormData("file0", file0.getName(), RequestBody.create(MediaType.parse("multipart/form-data"), file0)),
            MultipartBody.Part.createFormData("file1", file1.getName(), RequestBody.create(MediaType.parse("multipart/form-data"), file1)),
            RequestBody.create(MediaType.parse("multipart/form-data"), json))
            .enqueue(new OnRetrofitCallbackListener<UploadHeadPicResponseModel>(mActivity) {
                @Override
                public void onSuccess(UploadHeadPicResponseModel responseModel) {
                  
                }

                @Override
                public void onFailure(int status, String failureMsg) {
                }
            });
}

关于android - 改造 2 : send files with json object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37254451/

相关文章:

android - 在 MoDisco 中生成调用图模型

android - Locale FRENCH 与 Locale FRANCE 之间的区别

java - android: java.lang.NoClassDefFoundError: 解析失败: Landroid/view/View$OnUnhandledKeyEventListener;

python - 从curl请求转换为Python时遇到问题

arrays - 需要帮助在 Swift 2 中的 API 调用中访问第二层数据

java - 我需要 Tomcat 上的 JAX-WS 运行时。可以把 "jax-ws/lib/*"放到 "tomcat/lib"吗?

android - 如何通过wifi在iOS和android之间进行通信?

ios - iOS-tableView,按降序对JSON数组排序

java - 使用与appengine服务器兼容的java为android客户端开发webservice(json格式)

java - Vaadin session 管理 - 它是如何工作的?