我希望我的 servlet 接收应用程序目录树下某个文件夹中的文件。服务器接受 multipart/form-data 格式的文件。我知道 @MultipartConfig
是标记 servlet 代码的正确属性,允许服务器创建文件。然而,并非每个位置都被认为是安全的,因此有两个问题:
- 指定文件上传 servlet 的位置时有哪些限制
- 路径可以是相对于应用程序路径还是应该是绝对路径?
- 文件之后必须是可下载的,所以一般来说,服务器上哪个位置是保存文件的最佳位置(应用程序树下、树外、Tomcat 树外等?)
- 由于注解似乎是一种允许 servlet 下载东西的非常“静态”的方式,例如,是否可以在 web.xml 中指定相同的方式?
谢谢!
最佳答案
1: Which are the limitations, when specifying the locations for file-upload servlets
它需要可读和可写。它还需要是一个现有位置,如果不存在,servletcontainer 不会为您预先创建它。
2: Can the paths be relative to application path or they should be absolute?
两者都可以,只要确认1)即可。该容器将在幕后使用 java.io.File
来表示位置。所以使用相对路径绝对不是一个好主意。
3: The files must be downloadable afterwards, so in general, which is a best place on the server to keep the files it (under the application tree, out of the tree, out of Tomcat tree etc?)
放入 webapp 文件夹会导致它们在您重新部署 webapp 时全部丢失。它也不适用于某些服务器配置,因为 WAR 文件的提取是一个可选的配置设置。所以把它们放在webapp文件夹外的固定路径上确实更好。要再次下载它们,只需添加一个新的 <Context>
到 Tomcat 或创建一个获得 FileInputStream
的 servlet从中写入 OutputStream
的回应。示例可以在 this answer 中找到.
4: Since annotation seems to be a very 'static' way to allow servlet download things, can the same be specified in web.xml, for example?
是的,您可以忽略 location
注释的属性并使用 Part#getInputStream()
将其写入所需位置。然后您可以将位置指定为 <init-param>
servlet 并在 init()
中初始化它方法。
关于java - ".": Illegal @MultipartConfig location,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5938645/