gpt4 book ai didi

android - 使用 Retrofit 上传图像时出现 FileNotFoundException

转载 作者:太空狗 更新时间:2023-10-29 13:50:19 26 4
gpt4 key购买 nike

我尝试使用 Retrofit 上传图片,但出现此错误:

无法向 API 提交帖子:java.io.FileNotFoundException:/document/image:30231: open failed: ENOENT (No such file or directory)

我的界面是这样的:

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");
}
});
}

最佳答案

获取文件路径有问题

试试这个:

if (requestCode == 1 && resultCode!=RESULT_CANCELED && resultCode == RESULT_OK && data != null && data.getData() != null) {

FilePathStr = null;

if (data != null) {



Uri selectedImage = data.getData();
String[] filePath = {MediaStore.Images.Media.DATA};
Cursor c = getContentResolver().query(selectedImage, filePath,
null, null, null);
c.moveToFirst();
int columnIndex = c.getColumnIndex(filePath[0]);
FilePathStr = c.getString(columnIndex);
c.close();
doAddNewEvent();




}

}

并使用字符串路径制作多部分

MultipartBody.Part body = null;

if (FilePathStr != null) {
File file = new File(FilePathStr );
RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"), file);
body = MultipartBody.Part.createFormData("image", file.getName(), reqFile);

}

关于android - 使用 Retrofit 上传图像时出现 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48741646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com