Azure App Service Java - Post 上传请求大小失败
Azure App Service Java - Post request for upload failing for size
我有一个用于 运行 Spring 启动 JAR 的 Azure Linux 应用服务。
在这个应用程序中,我有几个表单用于将文件上传到 Spring 应用程序,然后进行处理。
这一切都在本地和 AWS Elastic Beanstalk 实例上完美运行。
在 Azure Linux 应用服务上,文件超过 4MB 时失败。
我的猜测是,可能在应用服务前面运行的 IIS 实例具有某种限制,会阻止超过特定大小的 post 请求。
我一直在寻找我可以在 Azure 门户上进行的任何设置以允许上传更大的文件,但一直找不到任何设置。
有什么想法吗?
如何解决
(如果您使用 Spring 引导和 Maven 进行部署等)
基于以下@GeorgeChen 的回答。
在我的 Maven 项目的根目录上创建一个 web.config,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<!-- 100 MB in kilobytes -->
<httpRuntime maxRequestLength="204800" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- 100 MB in bytes -->
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
修改了POM文件,在Maven插件部分:
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>1.6.0</version>
<configuration>
<schemaVersion>V2</schemaVersion>
<resourceGroup>XXXXXXXXX</resourceGroup>
<appName>YYYYYYYYYYY</appName>
<region>northeurope</region>
<pricingTier>B2</pricingTier>
<runtime>
<os>linux</os>
<javaVersion>jre8</javaVersion>
<webContainer>jre8</webContainer>
</runtime>
<deployment>
<resources>
<resource><directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
<resource>
<directory>${project.basedir}</directory>
<targetPath>/</targetPath>
<includes>
<include>web.config</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
现在打包和部署后一切正常,通过 Azure 上传可以达到 100MB。
默认请求大小为 4MB,您可以在此处获取:support request File Upload utility guidelines。所以如果你想允许上传和下载更大的文件,你必须增加这个限制。
您可以在 web.config
文件中设置 maxRequestLength
和 maxAllowedContentLength
值。
这是一个示例 web.config。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<!-- 100 MB in kilobytes -->
<httpRuntime maxRequestLength="204800" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- 100 MB in bytes -->
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
</system.webServer>
更多信息,您可以参考这篇博客:Upload Large File In asp.net or website in Windows Azure .
除此之外,您还可以选择将文件上传到 Azure 存储来处理大文件。这是关于使用 Web API and Azure Blob.
我有一个用于 运行 Spring 启动 JAR 的 Azure Linux 应用服务。
在这个应用程序中,我有几个表单用于将文件上传到 Spring 应用程序,然后进行处理。
这一切都在本地和 AWS Elastic Beanstalk 实例上完美运行。
在 Azure Linux 应用服务上,文件超过 4MB 时失败。
我的猜测是,可能在应用服务前面运行的 IIS 实例具有某种限制,会阻止超过特定大小的 post 请求。
我一直在寻找我可以在 Azure 门户上进行的任何设置以允许上传更大的文件,但一直找不到任何设置。
有什么想法吗?
如何解决
(如果您使用 Spring 引导和 Maven 进行部署等)
基于以下@GeorgeChen 的回答。
在我的 Maven 项目的根目录上创建一个 web.config,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<!-- 100 MB in kilobytes -->
<httpRuntime maxRequestLength="204800" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- 100 MB in bytes -->
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
修改了POM文件,在Maven插件部分:
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>1.6.0</version>
<configuration>
<schemaVersion>V2</schemaVersion>
<resourceGroup>XXXXXXXXX</resourceGroup>
<appName>YYYYYYYYYYY</appName>
<region>northeurope</region>
<pricingTier>B2</pricingTier>
<runtime>
<os>linux</os>
<javaVersion>jre8</javaVersion>
<webContainer>jre8</webContainer>
</runtime>
<deployment>
<resources>
<resource><directory>${project.basedir}/target</directory>
<includes>
<include>*.jar</include>
</includes>
</resource>
<resource>
<directory>${project.basedir}</directory>
<targetPath>/</targetPath>
<includes>
<include>web.config</include>
</includes>
</resource>
</resources>
</deployment>
</configuration>
</plugin>
现在打包和部署后一切正常,通过 Azure 上传可以达到 100MB。
默认请求大小为 4MB,您可以在此处获取:support request File Upload utility guidelines。所以如果你想允许上传和下载更大的文件,你必须增加这个限制。
您可以在 web.config
文件中设置 maxRequestLength
和 maxAllowedContentLength
值。
这是一个示例 web.config。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<!-- 100 MB in kilobytes -->
<httpRuntime maxRequestLength="204800" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- 100 MB in bytes -->
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
</system.webServer>
更多信息,您可以参考这篇博客:Upload Large File In asp.net or website in Windows Azure .
除此之外,您还可以选择将文件上传到 Azure 存储来处理大文件。这是关于使用 Web API and Azure Blob.