【问题标题】:Cannot create a file using the Uri of `ACTION_GET_CONTENT`无法使用 `ACTION_GET_CONTENT` 的 Uri 创建文件
【发布时间】:2017-03-01 21:38:44
【问题描述】:

我正在尝试从设备中选择 pdf 文件并将其上传到服务器。 ACTION_GET_CONTENT 用于从设备中选择pdf。

sel_book.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent();
            intent.setType("application/pdf");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select PDF"), 1);
        }
    });

在活动结果中,我获取 Uri 并将其保存为字符串。

public void onActivityResult(int requestCode, int resultCode, Intent result) {
    if (resultCode == RESULT_OK) {
        if (requestCode == 1) {
            Uri uri = result.getData();
            String uriString = uri.toString();
            File myFile = new File(uriString);
            path = myFile.getAbsolutePath();
        }
    }
}

结果路径为/document/primary:Download/Aptitude_2016_17.pdf。我需要用它来创建一个新文件。 File selectedFile = new File(selectedFilePath);。但它不会创建文件。 selectedFile.isFile() 返回错误。我不知道为什么会这样。请帮我解决这个问题。提前致谢。

【问题讨论】:

    标签: android pdf uri


    【解决方案1】:

    ACTION_GET_CONTENT 用于从设备中选择 pdf。

    这允许用户选择一段内容。它不一定是文件。

    在活动结果中,我获取 Uri 并将其保存为字符串。

    这不是你使用Uri的方式。

    结果路径为 /document/primary:Download/Aptitude_2016_17.pdf。

    这不是文件系统路径。这是具有content 方案的Uri 的一部分。您没有从ACTION_GET_CONTENT 获得文件。你会得到一个指向一段内容的UriUri 可以指向用户和其他应用选择的任何东西

    • 您可以通过Urifile 方案访问的文件
    • 一个文件,但您无法访问(例如,在另一个应用的内部存储中)
    • 数据库中 BLOB 列的内容
    • 一段需要下载的内容
    • 等等

    使用ContentResovleropenInputStream() 获取有关任何内容的流。直接使用它(与您用来上传此内容的任何内容一起使用),或使用该流来制作您自己的文件和该内容的副本,这样您就有一个可以使用的文件。

    【讨论】:

    • 谢谢。您能帮我获取所选文件的文件系统路径吗?
    • @Choxmi:没有文件系统路径。唯一的方法是如果您创建自己的文件,使用ContentResolveropenInputStream(),再加上FileOutputStream 到您控制的某个文件。然后,使用标准 Java I/O 从输入流复制到输出流。然后,您拥有自己的文件和内容,您可以将其用于任何您想要的目的。完成后,请随意删除文件。
    • 知道了。非常感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多