打开失败:使用POST将图像上传到网站时ENOENT(没有此类文件或目录)

时间:2012-11-28 05:24:55

标签: android

我将图像的Uri字符串保存为SQLite字符串。我可以通过为它创建视图意图来查看图像。

但是当我使用FileBody(新文件(theUriFromTheDatabase))将图像上传到Web服务器时,它总是说“打开失败:ENOENT(没有这样的文件或目录)”

文件的uri是:“/ content:/ media / external / images / media / 667”

事实:

  1. 我确定文件在那里,因为我可以查看它
  2. 我启用了内部存储读/写,外部存储读/写权限
  3. 使用Galaxy Tab 2 10.1
  4. 没有SD卡
  5. 相同的代码适用于带有SD卡的Experia Neo V(是因为它没有SD卡吗?)
  6. 在启动应用程序之前尝试删除电线
  7. 系留USB已关闭
  8. 以下是代码:

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

1 个答案:

答案 0 :(得分:3)

如果是uri字符串,则需要文件名。谢谢@mh

ContentResolver cr = mContext.getContentResolver();
String[] projection = {MediaStore.MediaColumns.DATA};
Cursor cur = cr.query(Uri.parse(ins[i].image), projection, null, null, null);
if(cur != null) {
    cur.moveToFirst();
    String filePath = cur.getString(0);
    File imageFile = new File(filePath);
    if(imageFile.exists()) {
        // do something if it exists
        entity.addPart("image", new FileBody(imageFile));
    }
    else {
        // File was not found
        Log.e("MMP","Image not Found");
    }
} 
else {
    // content Uri was invalid or some other error occurred
    Log.e("MMP","Invalid content or some error occured");
}