Je développe une application Android. Dans mon application, je télécharge plusieurs images sur le serveur à l'aide de la bibliothèque réseau Retrofit. Avant de télécharger un fichier, je crée un fichier temporaire à partir de bitmaps. Puis supprimez-les après avoir téléchargé.Impossible de convertir la chaîne d'URI en fichier image dans Android
photoFiles = new ArrayList<File>();
MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM);
int index = 0;
for(Bitmap bitmap: previewBitmaps)
{
File file = null;
try{
String fileName = String.valueOf(System.currentTimeMillis())+".jpeg";
file = new File(Environment.getExternalStorageDirectory(), fileName); // create temporary file start from here
if(file.exists())
{
file.delete();
}
OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();
photoFiles.add(file);
requestBodyBuilder.addFormDataPart("files",file.getName(), RequestBody.create(MediaType.parse("image/png"),file));
}
catch (Exception e)
{
Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
index++;
}
//Upload process goes here and delete files back after upload
En utilisant le code ci-dessus, tout fonctionne bien. Mais le problème est que je dois créer des fichiers temporaires. Je ne veux pas créer de fichiers temporaires. Qu'est-ce que je veux faire est de créer une liste de tableau de la chaîne Uri lorsque je prends le fichier. Ensuite, lors du téléchargement du fichier, je vais les convertir en fichiers et faire le téléchargement.
photoFiles = new ArrayList<File>();
MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder().setType(MultipartBody.FORM);
int index = 0;
for(Bitmap bitmap: previewBitmaps)
{
File file = null;
try{
Uri uri = Uri.parse(photosUriStrings.get(index));
file = new File(getPathFromUri(uri));
Toast.makeText(getBaseContext(),getPathFromUri(uri),Toast.LENGTH_SHORT).show();
photoFiles.add(file);
requestBodyBuilder.addFormDataPart("files",file.getName(), RequestBody.create(MediaType.parse("image/png"),file));
}
catch (Exception e)
{
Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
index++;
}
Comme vous pouvez le voir dans ce qui précède, je suis convertir la chaîne URI retour à fichier, puis le télécharger. Mais cette fois, retrofit impossible de télécharger le fichier. Le fichier n'est pas nul aussi. Donc, je suis assez sûr que l'erreur est de convertir la chaîne d'uri en fichier image parce que mon ancien code ci-dessus fonctionne très bien. Pourquoi je ne peux pas faire ça? Comment puis-je convertir avec succès de l'URI au fichier image s'il vous plaît?
J'ai trouvé ce
Convert file: Uri to File in Android
et
Create File from Uri type android
à la fois ne fonctionne pas.
Vous ne savez pas ce que vous voulez. Commençons au début. Qu'est-ce que vous avez que vous voulez télécharger? Fichiers ou bitmaps ou quoi? – greenapps
Je veux télécharger le fichier. Mais j'ai besoin de montrer l'image d'aperçu. J'ai donc converti en bitmaps. Mais j'ai sauvegardé les chaînes d'Uri sur le rappel de résultat du sélecteur de fichiers. –
Si vous souhaitez télécharger un fichier, téléchargez-le. Qu'importe que vous deviez montrer une image d'aperçu aussi? Il suffit de télécharger le fichier. Pourquoi ne pas faire ça? – greenapps