2013-02-19 17 views
7

Ho riscontrato un problema nel tentativo di caricare un'immagine ottenuta da una foto scattata con la fotocamera, utilizzando la libreria Android Amazon S3.open failed: ENOENT (Nessun file o directory) errore

per salvare l'immagine

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

Per caricare l'immagine con il filePath:

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

Continuo a ricevere un errore Unable to calclualte MD5 hash:/file:/storage/sdcard0/DCIM/13161272646580.jpg open failed:ENOENT (No such file or directory)

ma quando passo in rassegna la mia sd directory della scheda Posso trovare l'immagine lì (l'immagine è stata crea ted) e ho creato le autorizzazioni pertinenti.

+0

Hai mai trovato una soluzione per questo? –

+0

Sto affrontando lo stesso problema. Conosci la soluzione? – Sakthimuthiah

+0

Lo stesso qui, qualsiasi soluzione? @just_user? – osayilgan

risposta

1

Non ricordo davvero quello che ho fatto. Ma questo è il codice che uso che funziona. Spero che possa aiutarti ragazzi!

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

Farò un tentativo, grazie. – osayilgan

+1

Il problema riguardava il file system. Sto utilizzando Transfer Manager per caricare i file, il che rende più semplice con meno linee del codice. Ma grazie per la risposta. – osayilgan

2

Il problema è nel tuo percorso di file . Usa un metodo del genere per ottenere il vero percorso.

Ti do un esempio, se stai ricevendo l'immagine da onActivityResult() Dovresti avere un onActivityResult (int requestCode, int resultCode, Intent data) dove puoi ottenere l'Uri della tua immagine.

Uri uri = data.getData();

Quindi lo usi e ottieni il vero percorso da Uri e passa questo a 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(); 
     } 
    } 
} 

Ho avuto lo stesso problema e lo risolvo facendo questo. Spero che sia d'aiuto!

Problemi correlati