无法在Android中将URI字符串转换为Image文件

时间:2016-10-17 07:55:46

标签: android file uri android-file

我正在开发一款Android应用。在我的应用程序中,我使用Retrofit网络库将多个图像上传到服务器。在我上传文件之前,我从位图创建一个临时文件。然后在上传后删除它们。

 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

使用上面的代码,一切正常。但问题是我必须创建临时文件。我不想创建临时文件。我想要做的是当我拿起文件时创建Uri字符串的数组列表。然后在文件上传时,我会将它们转换回文件并执行上传过程。

 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++;
        }

正如您在上面所看到的,我将URI字符串转换回文件然后上传它。但这次改造无法上传文件。文件也不为空。所以我很确定错误是将uri字符串转换回图像文件,因为上面的旧代码工作正常。为什么我不这样做?如何才能成功地从URI转换为图像文件?

我发现了这个

Convert file: Uri to File in Android

Create File from Uri type android

都不起作用。

1 个答案:

答案 0 :(得分:0)

我不清楚你的问题,但我认为这可能会对你有所帮助。此单行代码可以帮助您convert URI to file并在您的视图中显示。

Picasso.with(getContext()).load("URI path").into(holder.imgID);