7 votes

open failed:ENOENT (No such file or directory) error

J'ai un problème en essayant de télécharger une image que j'obtiens en prenant une photo avec l'appareil photo, en utilisant la bibliothèque S3 Android d'Amazon.

Pour enregistrer l'image

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

Pour télécharger l'image avec le chemin d'accès au fichier :

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

J'obtiens toujours une erreur Unable to calclualte MD5 hash:/file:/storage/sdcard0/DCIM/13161272646580.jpg open failed:ENOENT (No such file or directory)

mais lorsque je navigue dans le répertoire de ma carte sd, je peux y trouver l'image (l'image a été créée), et j'ai créé les permissions appropriées.

2voto

Renan Grativol Points 166

Le problème se situe au niveau de votre chemin d'accès au fichier . Utilisez une méthode de ce type pour obtenir le chemin réel.

Je vous donne un exemple, si vous obtenez l'image à partir de onActivityResult() Vous devriez avoir un onActivityResult(int requestCode, int resultCode, Intent data) où vous pouvez obtenir l'Uri de votre image.

Uri uri = data.getData() ;

Ensuite, vous l'utilisez pour obtenir le chemin réel à partir de l'Uri et vous le transmettez à la requête 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();
        }
    }
}

J'ai eu le même problème et je l'ai résolu en procédant comme suit. J'espère que cela vous aidera !

1voto

just_user Points 1446

Je ne me souviens pas vraiment de ce que j'ai fait. Mais voici le code que j'utilise et qui fonctionne. J'espère que cela pourra vous aider !

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X