使用带有 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());
这是我第一次使用 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());