I saved the Uri String of an image to SQLite as string. I can view the image by creating a view intent for it.
but when I upload the image to the web server using FileBody(new File(theUriFromTheDatabase)) it always saying “open failed: ENOENT (No such file or directory)”
The file’s uri is: “/content:/media/external/images/media/667”
Facts:
- I’m sure the file is there because I can view it
- I enabled internal storage read/write, external storage read/write permissions
- Using a Galaxy Tab 2 10.1
- It doesn’t have an SD card
- Same code works on my Experia Neo V with SD card (is it because it has no SD card?)
- Tried removing the wire before starting the app
- Tethered USB is off
Here is the code:
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;
}
It needed the filename instead if the uri string. thanks @mh