“。”:非法的@MultipartConfig位置

时间:2011-05-09 14:55:11

标签: java tomcat servlets file-upload

我希望我的servlet接收应用程序目录树下某个文件夹中的文件。服务器接受multipart / form-data格式的文件。我知道@MultipartConfig是标记servlet代码的正确属性,允许服务器创建文件。但是,并非每个地点都被认为是安全的,因此有两个问题:

  1. 在指定文件上传servlet的位置时有哪些限制
  2. 路径可以相对于应用程序路径还是绝对的?
  3. 之后文件必须可以下载,所以一般情况下,这是服务器保存文件的最佳位置(在应用程序树下,树外,Tomcat树之外等等)?
  4. 由于注释似乎是允许servlet下载的非常“静态”方式,例如可以在web.xml中指定吗?
  5. 谢谢!

1 个答案:

答案 0 :(得分:5)

  

1:在指定文件上传servlet的位置时有哪些限制

需要可读可写。它也需要是一个现有的位置,servletcontainer不会为你预先创建它。


  

2:路径可以相对于应用程序路径还是绝对的?

只要1)被确认,两者都是允许的。容器将在封面下使用java.io.File来表示位置。所以使用相对路径绝对是一个坏主意。


  

3:之后文件必须可以下载,所以一般情况下,这是服务器保存文件的最佳位置(在应用程序树下,树外,Tomcat树之外等等?)

在重新部署webapp时,放入webapp文件夹会导致它们全部丢失。它也不适用于某些服务器配置,因为WAR文件的提取是可选的配置设置。因此,将它们放在webapp文件夹之外的固定路径上真的更好。要再次下载它们,只需向Tomcat添加一个新的<Context>或创建一个从其获取FileInputStream的servlet并写入响应的OutputStream。示例可以在this answer中找到。


  

4:由于注释似乎是一种允许servlet下载的非常“静态”方式,例如可以在web.xml中指定吗?

是的,您可以完全忽略注释的location属性,并使用Part#getInputStream()将其写入所需位置。然后,您可以将位置指定为servlet的<init-param>,并使用init()方法对其进行初始化。