3

我让用户从 sdcard 中选择一个文件上传到我的服务器并保存Uri返回给我的文件onActivityResult

例子:

file:///storage/emulated/0/Download/menu-4.27.13.pdf

当我尝试将其转换为字节数组以发送到服务器时,我得到了FileNotFoundException

if(!fileURI.equals("")){
    File pdf = new File(fileURI);
    try 
    {
        FileInputStream fin = new FileInputStream(pdf);

        byte fileContent[] = new byte[(int)pdf.length()];
        fin.read(fileContent);
        fin.close();

        String pdfString = Base64.encode(fileContent);
        sb.append(pdfString);
    } 
    catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }
    catch(IOException ioe)
    {
        ioe.printStackTrace();                      
    }
}

}

堆栈跟踪

11-04 11:57:30.597: W/System.err(13531): java.io.FileNotFoundException: /file:/storage/emulated/0/Download/menu-4.27.13.pdf: open failed: ENOENT (No such file or directory)
11-04 11:57:30.597: W/System.err(13531):    at libcore.io.IoBridge.open(IoBridge.java:409)
11-04 11:57:30.607: W/System.err(13531):    at java.io.FileInputStream.<init>(FileInputStream.java:78)
11-04 11:57:30.607: W/System.err(13531):    at com.ecm2.mobilemap.services.MessageService.getModifiedElements(MessageService.java:2755)
11-04 11:57:30.617: W/System.err(13531):    at com.ecm2.mobilemap.services.MessageService.callSync(MessageService.java:2433)
11-04 11:57:30.617: W/System.err(13531):    at com.ecm2.mobilemap.services.MessageService.onHandleIntent(MessageService.java:190)
11-04 11:57:30.627: W/System.err(13531):    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
11-04 11:57:30.627: W/System.err(13531):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-04 11:57:30.637: W/System.err(13531):    at android.os.Looper.loop(Looper.java:137)
11-04 11:57:30.637: W/System.err(13531):    at android.os.HandlerThread.run(HandlerThread.java:61)
11-04 11:57:30.637: W/System.err(13531): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
11-04 11:57:30.647: W/System.err(13531):    at libcore.io.Posix.open(Native Method)
11-04 11:57:30.657: W/System.err(13531):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
11-04 11:57:30.657: W/System.err(13531):    at libcore.io.IoBridge.open(IoBridge.java:393)

那不是File初始化时作为字符串的对象吗?FileNotFoundException当用户选择文件时,为什么我收到Uri返回给我的信息

4

2 回答 2

11

Uri包含file:需要删除的方案。使用Uri.parse,您可以计算字符串中包含的 Uri,使用uri.getPath(),您可以从 uri 中提取文件路径:

Uri uri = Uri.parse(fileURI);
File pdf = new File(uri.getPath());
于 2013-11-04T17:02:25.417 回答
0

您的代码是正确的,可能文件不存在或路径错误。查看堆栈跟踪。第一行本身就说明了整个问题。尝试访问其他文件并首先使用 URI 解析 filePath

于 2013-11-04T17:02:07.880 回答