2013-02-19 14 views
7

Mam problem z przesłaniem obrazu, który otrzymałem od zrobienia zdjęcia aparatem, używając biblioteki android S3 firmy amazon.open failed: ENOENT (Brak takiego pliku lub katalogu) error

Aby zapisać obrazek

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

Aby przesłać obraz z 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()); 
     } 

Wciąż dostaję błąd Unable to calclualte MD5 hash:/file:/storage/sdcard0/DCIM/13161272646580.jpg open failed:ENOENT (No such file or directory)

ale kiedy mogę przeglądać moje sd Katalog kart Można tam znaleźć zdjęcie (zdjęcie zostało zrobione crea ted) i utworzyłem odpowiednie uprawnienia.

+0

Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? –

+0

Mam ten sam problem. Czy znasz rozwiązanie? – Sakthimuthiah

+0

To samo, jakieś rozwiązanie? @just_user? – osayilgan

Odpowiedz

1

Nie bardzo pamiętam, co zrobiłem. Ale to jest kod, którego używam. Mam nadzieję, że to ci pomoże!

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

Spróbuję, dzięki. – osayilgan

+1

Problem dotyczył systemu plików. Używam programu Transfer Manager do przesyłania plików, co ułatwia z mniejszą linią kodu. Ale dzięki za odpowiedź. – osayilgan

2

Problem polega na swojej drodze plików. Użyj takiej metody, aby uzyskać prawdziwą ścieżkę.

Podam przykład, jeśli otrzymujesz obraz z onActivityResult() Powinieneś mieć właściwość onActivityResult (int requestCode, int resultCode, Intent data), w której można uzyskać Uri obrazu.

Uri uri = data.getData();

Następnie należy go użyć i uzyskać rzeczywistą ścieżkę od Uri i przekazać to do 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(); 
     } 
    } 
} 

Miałem ten sam problem i rozwiązałem go. Mam nadzieję, że to pomoże!

Powiązane problemy