2013-02-19 17 views
7

Ich habe ein Problem beim Hochladen eines Bildes, das ich von der Aufnahme eines Bildes mit der Kamera, mit Amazon S3 Android-Bibliothek.öffnen fehlgeschlagen: ENOENT (keine solche Datei oder Verzeichnis) Fehler

Um das Bild

File _photoFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), (cal.getTimeInMillis() + ".jpg")); 

      try { 
       if (_photoFile.exists() == false) { 
        _photoFile.getParentFile().mkdirs(); 
        _photoFile.createNewFile(); 
       } 

      } catch (IOException e) { 
       // Log.e(TAG, "Could not create file.", e); 
      } 
      // Log.i(TAG, path); 

      filePath = Uri.fromFile(_photoFile); 
      Intent cameraIntent = new Intent(
        android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, filePath); 
      startActivityForResult(cameraIntent, 1); 

Um das Bild mit dem filePath zu speichern hochladen:

try { 
      s3Client.createBucket(Constants.getPictureBucket()); 

      // Content type is determined by file extension. 
      PutObjectRequest por = new PutObjectRequest(
        Constants.getPictureBucket(), Constants.PICTURE_NAME, 
        new java.io.File(filePath)); 
      s3Client.putObject(por); 
     } catch (Exception exception) { 

      result.setErrorMessage(exception.getMessage()); 
     } 

Ich erhalte einen Fehler Unable to calclualte MD5 hash:/file:/storage/sdcard0/DCIM/13161272646580.jpg open failed:ENOENT (No such file or directory)

aber wenn ich sehe meine sd Kartenverzeichnis Ich kann das Bild dort finden (das Bild ist crea ted), und ich habe die entsprechenden Berechtigungen erstellt.

+0

Haben Sie jemals eine Lösung dafür gefunden? –

+0

Ich stehe vor dem gleichen Problem. Kennst du die Lösung? – Sakthimuthiah

+0

Das gleiche hier, jede Lösung? @just_user? – osayilgan

Antwort

1

Ich erinnere mich nicht wirklich, was ich tat. Aber das ist der Code, den ich benutze, der funktioniert. Hoffe es kann euch helfen!

AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials("XXX", "XXX")); 
String time = "" + System.currentTimeMillis(); 
PutObjectRequest por = new PutObjectRequest("fraternity", xyz_url_xyz + "/avatar" + time + ".jpg", new java.io.File(params[0])); 
por.setCannedAcl(CannedAccessControlList.PublicRead); 
s3Client.putObject(por); 
ResponseHeaderOverrides override = new ResponseHeaderOverrides(); 
override.setContentType("image/jpeg"); 
GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest("xyz_url_xyz/avatar.jpg"); 
urlRequest.setExpiration(new Date(System.currentTimeMillis() + 3600000)); 
urlRequest.setResponseHeaders(override); 
s3Client.generatePresignedUrl(urlRequest); 
+0

Ich werde es versuchen, danke. – osayilgan

+1

Das Problem betraf das Dateisystem. Ich verwende Transfer Manager, um die Dateien hochzuladen, was es mit weniger Codezeile einfacher macht. Aber danke für die Antwort. – osayilgan

2

Das Problem ist in Ihrem Dateipfad. Verwenden Sie eine solche Methode, um den Real Path zu erhalten.

Ich gebe Ihnen ein Beispiel, wenn Sie das Bild von onActivityResult bekommen() Sie sollten eine onActivityResult (int requestCode, int Result, Intent-Daten), wo Sie den Uri Ihres Bildes bekommen.

Uri uri = data.getData();

Dann nutzen Sie sie und den realen Weg von Uri erhalten und übergeben diese an die PutObjectRequest (BUCKET_NAME, IMAGE_NAME, REAL_PATH);

public String getRealPathFromURI(Context context, Uri contentUri) { 
    Cursor cursor = null; 
    try { 
     String[] proj = { MediaStore.Images.Media.DATA }; 
     cursor = context.getContentResolver().query(contentUri, proj, null, null, null); 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
} 

Ich hatte das gleiche Problem und ich löse es dabei. Ich hoffe es hilft!

Verwandte Themen