Android将ANY文件上传到Server

时间:2015-03-18 14:03:11

标签: android

我正在开发一个应用程序,用户可以从SD卡中选择任何文件并将其上传到服务器。用户还可以从相机中单击图像并上传图像。这工作正常,但当我尝试从文件资源管理器中选择任何其他文件时它只是不起作用。

允许用户选择任何文件的代码:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("file/*"); 
    intent.addCategory(Intent.CATEGORY_OPENABLE);

    try {
        startActivityForResult(Intent.createChooser(intent, "Complete action using"), GET_FILE_REQUEST_CODE);
    }
    catch (Exception ex) {
        Toast.makeText(getActivity(), "Please install any File Manager to complete the task.", Toast.LENGTH_SHORT).show();
    }

从活动中获取结果的代码:

if (resultCode == getActivity().RESULT_OK) {
            Uri uri = Uri.parse(data.getData().toString());
            File myfile=new File(uri.getPath());
            sendSelectedFileURI(myfile.getAbsolutePath());
            Log.d("patho",uri.getPath());
            Log.d("path",myfile.getAbsolutePath());
        } else if (resultCode == getActivity().RESULT_CANCELED) {


        } else {
            Toast.makeText(getActivity(),
                    "Error", Toast.LENGTH_SHORT)
                    .show();
        }

然后我只是创建文件并将其作为FileBody添加到HttpEntity中,如下所示:

File sourceFile=new File(filepath);
entity.addPart("image", new FileBody(sourceFile));

在某些设备中,我获得正确的路径并将文件上传到服务器,在某些设备中,它会抛出File not found异常。它在我正在创建FileBody的行上抛出错误。

所以我想要的是用户可以从SD卡中选择任何类型的文件,然后选择它在服务器上传。

1 个答案:

答案 0 :(得分:0)

在参考以下链接后,我解决了这个问题。

Get the path from Uri in Android Kitkat throws Illegal Argument exception

基本上我们需要检查KitKat及以上Builds上的DocumentURI。