如何将InputStream对象转换为File对象?

时间:2017-05-20 15:37:50

标签: java html file servlets java-ee

我试图获得一个"文件"从html表单调用的servlet中的实例,我可以在计算机上选择PDF文件。 我成功地将文件作为" InputStream"但后来我无法进一步将其转换为"文件"宾语。

经过多次尝试之后,我仍然无法弄清楚我应该做些什么才能让它发挥作用。有什么想法吗?

错误:

java.io.FileNotFoundException: test.pdf (Read-only file system)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at org.apache.commons.io.FileUtils.openOutputStream(FileUtils.java:360)
    at org.apache.commons.io.FileUtils.openOutputStream(FileUtils.java:319)
    at org.apache.commons.io.FileUtils.copyToFile(FileUtils.java:1552)
    at org.apache.commons.io.FileUtils.copyInputStreamToFile(FileUtils.java:1528)

代码:

Part filePart = request.getPart("file"); 
InputStream fileContent = filePart.getInputStream();

if (fileContent != null)
{      
    File file = new File(filename.trim() + ".pdf");
    FileUtils.copyInputStreamToFile(fileContent, file);

    //use the "file" instance
    //...
}

1 个答案:

答案 0 :(得分:2)

正如异常告诉你的那样,问题不在于“创建文件”。问题是磁盘/分区是写保护的

您应该在可写的文件系统上创建文件。尝试指定绝对路径,例如

File file = new File("/tmp/" + filename.trim() + ".pdf");
//or
file = new File("/home/userhome/" + filename.trim() + ".pdf");

该文件应该只在可写文件系统上创建。