PcP*_*sar 9 c# asp.net-mvc iis-7 file-upload maxrequestlength
我已经知道的有关MVC上传大小限制的事情:
maxAllowedContentLength并maxRequestLength为最大上传大小我有一个上传组件,应该能够处理多达200MB的文件.我不认为将maxlimit每个页面设置为200MB的权利,所以我想使用动态请求URL作为位置.
上传URL的路由模式如下所示: {dynamicvalue}/ConvertModule/Upload
("ConvertModule"是控制器,"上传"是动作.)困难的部分是{dynamicvalue},因为这个我不能设置一个固定的位置web.config.
由于会话劫持,我不想使用Flash上传或类似的东西作为解决方案.
问题1:是否有办法仅为给定路由模式设置上传限制?
不是我知道,因为<location>节点不支持动态网址.但你可以通过使用url rewrite模块来欺骗它.
因此,假设您有一个处理文件上传的控制器:
public class PicturesController
{
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file, int dynamicValue)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
并且您有一些配置为与此控制器匹配的路由:
routes.MapRoute(
"Upload",
"{dynamicvalue}/ConvertModule/Upload",
new { controller = "Pictures", action = "Upload" },
new { dynamicvalue = @"^[0-9]+$" }
);
Run Code Online (Sandbox Code Playgroud)
好的,现在让我们在web.config中设置以下重写规则:
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="rewrite the file upload path" enabled="true">
<match url="^([0-9]+)/ConvertModule/Upload$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="pictures/upload?dynamicvalue={R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
到目前为止很好,现在你可以设置<location>为pictures/upload:
<location path="pictures/upload">
<system.web>
<!-- Limit to 200MB -->
<httpRuntime maxRequestLength="204800" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- Limit to 200MB -->
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
</system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud)
现在您可以上传到以下模式{dynamicvalue}/ConvertModule/Upload的url :url rewrite模块将重写它,pictures/upload?dynamicvalue={dynamicvalue}但<location>标记将匹配pictures/upload并成功应用限制:
<form action="/123/ConvertModule/Upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">OK</button>
</form>
Run Code Online (Sandbox Code Playgroud)
问题2:超过上传大小时是否可以显示自定义警告?
不,您必须将限制设置为更大的值,并在上传处理程序内检查文件大小.如果您可以检查客户端上的文件大小(HTML5,Flash,Silverlight,...),那么这样做是为了避免浪费带宽.
| 归档时间: |
|
| 查看次数: |
3868 次 |
| 最近记录: |