Servlet - 强制覆盖下载的文件

时间:2011-12-17 16:49:36

标签: java jsf java-ee servlets jsf-2

如何将此代码更改为强制覆盖保存在驱动器上的现有先前打开的文件?它是在客户端打开pdf文件的servlet的一部分。

response.reset();
response.setContentType("application/pdf");
response.setContentLength(file.length());
response.setHeader("Content-disposition", "inline; filename=\"" + file.getName() + "\"");
BufferedInputStream input = null;
BufferedOutputStream output = null;

try 
{
  input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
  output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);

  byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
  int length;
  while ((length = input.read(buffer)) > 0) 
  {
    output.write(buffer, 0, length);
  }
} 
finally 
{
  close(output);
  close(input);
}

打开文件的每个下一个副本都有一个新索引,例如test.pdf,test(1).pdf等

3 个答案:

答案 0 :(得分:3)

无法控制它。

这取决于客户端的OS文件系统实现

答案 1 :(得分:1)

您可以最好地配置客户端浏览器以询问是否覆盖,例如在Firefox中它是: enter image description here

据我所知,要求覆盖是Opera中的默认行为。

答案 2 :(得分:0)

在去写之前检查给定文件是否存在? 使用文件api file.exists()如果存在,使用文件api file.delete()删除给定文件并继续编写进程