我希望我的servlet接收应用程序目录树下某个文件夹中的文件。服务器接受multipart / form-data格式的文件。我知道@MultipartConfig
是标记servlet代码的正确属性,允许服务器创建文件。但是,并非每个地点都被认为是安全的,因此有两个问题:
谢谢!
答案 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()
方法对其进行初始化。