我正在开发一个 Wildfly Swarm 项目(使用 Wildfly Swarm 版本 2017.8.1、Maven 3.5.0、OpenJDK 1.8.0_141),用户通常会上传比 Undertow 的默认 10485760 字节(10MB)最大后置大小设置更大的文件.
我从其他问题中看到,我需要改变的是关键swarm.undertow.servers.default-server.http-listeners.default.max-post-size
。
为了尝试这个设置,我在启动 jar 时将它放在命令行上:
java -jar project-swarm.jar -Dswarm.undertow.servers.default-server.http-listeners.default.max-post-size=4000000000
这行得通。如果我想使用 Wildfly Swarm maven 插件运行它,以下内容也适用:
mvn wildfly-swarm:run -Dswarm.undertow.servers.default-server.http-listeners.default.max-post-size=4000000000
使用上述两个命令中的任何一个,我都可以上传大于 10485760 字节(10MB)的文件。下一步是将此设置为默认值,这样我就不必每次都通过命令行传递它。Wildfly Swarm 官方配置文档说我应该将 undertow 设置放在 project-defaults.yml 文件中。这就是我的样子:
swarm:
undertow:
servers:
default-server:
http-listeners:
default:
max-post-size: 4000000000
问题是,这些文档都没有说明文件最终应该在哪里结束。它应该最终成为战争的一部分,在 WEB-INF/classes 下,还是战争的根源,还是其他地方?来自 github 上的 wildfly-swarm 示例存储库,通常是project-defaults.yml file is in
src/main/resources`,这是我最初拥有它的地方。但是,它对我不起作用。任何上传大于 10485760 字节 (10MB) 的文件的尝试都会失败。
我发现 maven 项目中放入的任何内容src/main/resources
都会放入 war 文件中/WEB-INF/classes
(并且 war 文件本身由 swarm jar 包装)。因此,我更新了我的 maven pom,以便将 project-defaults.yml 存储在 war 文件本身的基本目录中。这仍然没有用。
接下来,我尝试将 project-defaults.yml 放入 swarm jar 本身,而不是封闭的战争。再一次,我无法突破 10485760 字节 (10MB) 的 max-post-size 默认值。
最后,我尝试使用命令行选项来引用外部 yml 文件,如下所示:
java -jar project-swarm.jar -s../src/main/root-resources/project-defaults.yml
这加载了文件,但是我仍然坚持默认的最大后置大小 10485760 字节(10MB)。
在这一点上,我难住了。我的 project-defaults.yml 文件可能是错误的,或者我没有将它放在正确的位置。如何解决此问题,以便我可以上传大于 10485760 字节 (10MB) 的文件并通过 project-defaults.yml 文件指定它?