我正在开发一个Wildfly Swarm项目(使用Wildfly Swarm版本2017.8.1,Maven 3.5.0,OpenJDK 1.8.0_141),用户经常会上传文件大于Undertow的默认值10485760字节(10MB)max-post-size设置。
我从其他questions看到我需要更改的内容是密钥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)的文件。下一步是将其设置为默认值,这样我就不必每次都通过命令行传递它。 official Wildfly Swarm configuration documentation表示我应该将underow设置放在project-defaults.yml文件中。这就是我的样子:
swarm:
undertow:
servers:
default-server:
http-listeners:
default:
max-post-size: 4000000000
问题是,这些文档都没有说文件应该最终结束。它应该最终作为战争的一部分,在WEB-INF /类,战争的根源,还是其他地方?来自github上的wildfly-swarm示例repo,通常是project-defaults.yml file is in
src / main / resources`,这是我原来的地方。但是,它对我没有用。任何上传大于10485760字节(10MB)的文件的尝试都会失败。
我发现放入src/main/resources
的maven项目中的任何内容都会被放入war文件中/WEB-INF/classes
(war文件本身被swarm jar包装)。所以,我更新了我的maven pom,以便将project-defaults.yml存储在war文件本身的基本目录中。这仍然不起作用。
接下来,我尝试将project-defaults.yml放入swarm jar本身,而不是封闭的war。再一次,我无法突破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文件指定它?
答案 0 :(得分:6)
对于那些搜索此问题答案的人,您有两种方法可以在项目中放置project-defaults.yml
。
src/main/resources/project-defaults.yml
将文件放在其他位置,例如:src/main/java/project-defaults.yml
然后,在构建部分内部使用maven将其声明为资源,如下所示:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>project-defaults.yml</include>
</includes>
</resource>
</resources>
</build>