我正在尝试使用web服务在浏览器中向用户显示pdf。一旦它们传入包含所需变量的URL。我的程序首先将PDF下载到本地存储,然后继续将其复制到流并显示它。一旦查看器能够查看PDF,我们希望在本地删除文件,这样我们就不会存储搜索到的每个文件。我已经设法完成了这个任务的大部分,但是我有问题删除文件,一旦它显示给用户。
甚至当我试图手动删除文件时,我收到"当前在Java SE二进制中使用"消息
下面的代码:File testFile = new File("C:\Users\stebela\workspace\my-app\invoice"+invNum+".pdf");
try
{
ServletOutputStream os = res.raw().getOutputStream();
FileInputStream inputStr = new FileInputStream(testFile);
IOUtils.copy(inputStr, os);
os.close();
inputStr.close();
//finished settings
res.status(200);
testFile.delete();
} catch (IOException e)
{
System.out.println(e.getMessage());
}
如果你不写入文件,你的代码应该可以工作。
如果调用inputStr.close();
,则该文件不再被java使用,可以删除。
如果您的文件没有被任何其他程序使用,请检查。如果你重新启动你的电脑是最好的。
如果它仍然不工作,这将是有趣的,知道res是什么,如果你的文件得到发送。
我已经阅读了这部分文档,我想这应该可以解决你的问题。
它将文件读入字符串并更改png图像的标题。作为http正文,它使用文件的字符串。
确保,如果您更改响应类型,您必须将行res.type("image/png");
更改为新的。
这里是最常见的
File testFile = null;
try {
testFile = new File("C:\Users\stebela\workspace\my-app\invoice"+invNum+".png");
FileInputStream fin = new FileInputStream(testFile);
int charAsInt = 0;
String httpBody = "";
while((charAsInt = fin.read()) != -1){
httpBody +=(char)charAsInt;
}
fin.close();
res.body(httpBody);
res.type("image/png");
res.status(200);
testFile.delete();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}