繁体   English   中英

Android Marshmallow之上的翻新Multipart API出现错误java.lang.IllegalStateException:Multipart主体必须至少包含一部分

[英]Retrofit Multipart API above Android Marshmallow getting error java.lang.IllegalStateException: Multipart body must have at least one part

我正在使用Retrofit 2遇到错误,它在Android Marshmallow以下的设备上运行良好。 超过棉花糖,它给下面的错误

>java.lang.IllegalStateException: Multipart body must have at least one part.

    MultipartBody.Builder builder = new MultipartBody.Builder();
    builder.setType(MultipartBody.FORM);


    try {
        for (int i = 0; i < filePaths.size(); i++) {
            File file = new File(filePaths.get(i));
            String mFileName = App.getInstance().getPrefs().getUserId() + "_" + new Date().getTime() + file.getName();
            builder.addFormDataPart("file[]", mFileName, RequestBody.create(MediaType.parse("multipart/form-data"), file));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    MultipartBody requestBody = builder.build();
    APIInterface appInterface = APIClient.getClient().create(APIInterface.class);
    Call<ResponseBody> call = appInterface.uploadMultiFile(requestBody);

    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
            try {
                if (response.isSuccessful()) {
                    view.onFileUploaded();
                } else {
                    view.showToast();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
            view.showToast();
        }
    });

你能帮我吗

这就是我使用请求正文上传图像的方式。

RequestBody fileBody = RequestBody.create(MediaType.parse("image/*"), selectedImage /* file name*/);
MultipartBody.Part filePart = MultipartBody.Part.createFormData("image", selectedImage.getName(), fileBody);

并在您的界面类中

 @Multipart
    @POST(UPLOAD_IMAGE)
    Call<JsonObject> uploadImage(@Part MultipartBody.Part image);

它适用于所有设备。希望对您有所帮助。

本教程将帮助您解决问题https://futurestud.io/tutorials/retrofit-2-how-to-upload-files-to-server

对于多文件上传,请使用此

    List<MultipartBody.Part> projectParts = new ArrayList<>();

    for (int i = 0; i < mFilesTobeincluded.size(); i++) {
        File file = new File(mFilesTobeIncluded.get(i));
        String boundary = String.valueOf(System.currentTimeMillis());

        Log.d(TAG, "requestUpload: image " + i + "  " + mFilesTobeincluded.get(i));
        RequestBody requestFile =
                RequestBody.create(
                        MediaType.parse("multipart/form-data; boundary=" + boundary),
                        file
                );
        projectParts.add(MultipartBody.Part.createFormData("name_of_key", file.getName(), requestFile));
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM