我让用户从 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
初始化时作为字符串对象的内容吗?当用户选择文件时返回给我的 Uri
为什么我会收到 FileNotFoundException
最佳答案
您的 Uri
包含您需要删除的 file:
方案。使用 Uri.parse
,您计算出字符串中包含的 Uri,使用 uri.getPath()
,您从 uri 中提取文件路径:
Uri uri = Uri.parse(fileURI);
File pdf = new File(uri.getPath());
关于android - 使用 Uri 从 SD 卡获取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772856/