我试图使用Retrofit上传一张图片,但是遇到了以下错误:
无法将帖子提交到API:java.io.FileNotFoundException:/document/image:30231:打开失败:ENOENT(没有这样的文件或目录)
我的接口如下:
public interface MyService{
@Multipart
@POST("/url")
Call<ResponseBody> addNewEvent( @Part("case_Id") int caseId,@Part MultipartBody.Part(file);
}
点击按钮时,将调用selectImage()
函数:
private void selectImage() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Please select image",1);
}
在
onActivityResult
部分,我进行了以下操作:@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1 && resultCode!=RESULT_CANCELED && resultCode == RESULT_OK && data != null && data.getData() != null) {
FilePathUri = data.getData();
doAddNewEvent();
}
}
从上面可以看到,调用了
doAddNewEvent()
函数。public void doAddNewEvent() {
File file = new File(FilePathuri.getPath());
RequestBody requestFile=RequestBody.create(MediaType.parse("multipart/form-data"), file);
MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile);
apiService.addNewEvent(inputCaseId, body).enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {
ResponseBody addEventResponse = response.body();
Log.d("as", "response: " + addEventResponse);
finish();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.e("as", "Unable to submit post to API");
}
});
}
getPath()
存在一些问题,请调试你的代码。查看这个讨论或者搜索类似的内容。 - ADMFilePathUri.getPath()
中,我得到了这个:/document/image:23165
。 - sangeeta