我将图像的 Uri 字符串作为字符串保存到 SQLite。我可以通过为其创建视图意图来查看图像。
但是当我使用 FileBody(new File(theUriFromTheDatabase)) 将图像上传到网络服务器时,它总是说“打开失败:ENOENT(没有这样的文件或目录)”
该文件的 uri 是:“/content:/media/external/images/media/667”
事实:
- 我确定文件在那里,因为我可以查看它
- 我启用了内部存储读/写,外部存储读/写权限
- 使用 Galaxy Tab 2 10.1
- 它没有 SD 卡
- 相同的代码适用于我的带有 SD 卡的 Experia Neo V(是因为它没有 SD 卡吗?)
- 尝试在启动应用程序之前移除电线
- 系留 USB 已关闭
这是代码:
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
InspectionsDbController db = new InspectionsDbController(getActivity());
InspectionItemStruct[] ins = db.getInspectionList(((MyApplication)((Activity) mContext).getApplication()).getCurrentInspectionId());
SharedPreferences settings = mContext.getSharedPreferences(MainActivity.PREFS_NAME, 0);
long userId = settings.getLong("userId", 0);
String token = settings.getString("token", "");
for (int i = 0; i < ins.length; i++) {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost("http://webprojectupdates.com/mmp/api/mobile/upload_inspection");
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
// add userId
try {
entity.addPart("userId", new StringBody(String.valueOf(userId)));
entity.addPart("token", new StringBody(String.valueOf(token)));
} catch (IOException e) {
Log.e("MMP","Error in adding token: "+e.getMessage());
}
// add media attachments
if(ins[i].image!=null){
//Bitmap image = BitmapFactory.decodeFile(ins[i].image);
//ByteArrayOutputStream bos = new ByteArrayOutputStream();
//image.compress(CompressFormat.JPEG, 75, bos);
//byte[] imageData = bos.toByteArray();
//ByteArrayBody bab = new ByteArrayBody(imageData,"image/jpg", ins[i].itemId+".jpg");
//entity.addPart("image", bab);
entity.addPart("image", new FileBody(new File (ins[i].image)));
}
if(ins[i].video!=null){
entity.addPart("video", new FileBody(new File (ins[i].video)));
}
// Normal string data
try {
entity.addPart("itemId", new StringBody(String.valueOf(ins[i].itemId)));
entity.addPart("isExist", new StringBody(String.valueOf(ins[i].itemExists)));
if(ins[i].comments!=null) entity.addPart("comment", new StringBody(String.valueOf(ins[i].comments)));
entity.addPart("condition", new StringBody(String.valueOf(ins[i].condition)));
} catch (IOException e) {
Log.e("MMP","Error in adding inspection data: "+e.getMessage());
}
try {
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost, localContext);
String result = EntityUtils.toString(response.getEntity());
} catch (IOException e) {
Log.e("MMP","Error in handling result: "+e.getMessage());
}
publishProgress(i+1,ins.length);
}
return null;
}