使用带有 Retrofit2 的 Multipart 的服务器上的文件似乎已损坏

Files appear corrupted on server using Multipart with Retrofit2

这是我第一次使用 Multipart 。我正在尝试在我的服务器中上传图片或 pdf 文件

文件已上传到服务器,但每次此文件都已损坏。 文件路径如 content:/com.android.providers.media.documents/document/image%3A5122.jpg

我使用 Retrofit 2,这是我的代码

API Service

 @Multipart
@POST("Attachment")
Call<Boolean> PostAttachments(@Query("user_id") int userID,
                              @Query("main_id") int mainID,
                              @Query("service_id") int serviceID,
                              @Query("is_car")Boolean isCar,
                              @Part MultipartBody.Part file);

And here is I use Multipart

 @Override
public void postAttachment(OnFinishedListner onFinishedListner,int userID,int mainID,int serviceID,Boolean isCar,File file) {
    RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file.getPath());
    MultipartBody.Part multipartBody =MultipartBody.Part.createFormData("file",file.getName(),requestFile);
    APIService apiService = APIClient.getInstanceRetrofit().create(APIService.class);
    Call<Boolean> call = apiService.PostAttachments(userID,mainID,serviceID,isCar,multipartBody);
    call.enqueue(new Callback<Boolean>() {
        @Override
        public void onResponse(Call<Boolean> call, Response<Boolean> response) {
            onFinishedListner.onFinished(response.body());
        }

        @Override
        public void onFailure(Call<Boolean> call, Throwable t) {
            onFinishedListner.onFailed(t);
        }
    });

}

文件路径在数据库中成功发布,文件出现在我的服务器中,其扩展名类似于 .jpg 但是当我打开它时,它似乎已损坏

以下是我如何使用 Retrofit 将 PNG 图像上传到我的服务器

val file = File(fileUri.path)
        val requestBody = RequestBody.create("image/*".toMediaTypeOrNull(), file)
        val fileToUpload = MultipartBody.Part.createFormData("image", file.name, requestBody)
        val filename = RequestBody.create("text/plain".toMediaTypeOrNull(), file.name)
webServiceApi.uploadFile(filename, fileToUpload)

希望对您有所帮助

我通过替换 RequestBody

解决了我的问题

正在替换

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

RequestBody requestFile = RequestBody.create(MediaType.parse("*/*"), file.getAbsoluteFile());