3 Stimmen

öffnen fehlgeschlagen: ENOENT (No such file or directory) beim Hochladen eines Bildes auf eine Website mittels POST

Ich habe den Uri-String eines Bildes in SQLite als String gespeichert. Ich kann das Bild anzeigen, indem ich einen View Intent für das Bild erstelle.

aber wenn ich das Bild mit FileBody(new File(theUriFromTheDatabase)) auf den Webserver hochlade, heißt es immer "open failed: ENOENT (No such file or directory)"

Die Uri der Datei lautet: "/content:/media/external/images/media/667"

Fakten:

  1. Ich bin sicher, dass die Datei vorhanden ist, denn ich kann sie anzeigen.
  2. Ich habe die Lese-/Schreibrechte für den internen Speicher und die Lese-/Schreibrechte für den externen Speicher aktiviert.
  3. Verwendung eines Galaxy Tab 2 10.1
  4. Es hat keine SD-Karte
  5. Derselbe Code funktioniert auf meinem Experia Neo V mit SD-Karte (ist es, weil es keine SD-Karte hat?)
  6. Ich habe versucht, das Kabel vor dem Starten der Anwendung zu entfernen.
  7. Tethered USB ist ausgeschaltet

Hier ist der 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;
    }

3voto

thedjaney Punkte 1106

Es brauchte den Dateinamen anstelle des Uri-Strings. Danke @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");
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X