gpt4 book ai didi

.net - 限制 WebClient DownloadFile 最大文件大小

转载 作者:可可西里 更新时间:2023-11-01 16:04:52 25 4
gpt4 key购买 nike

在我的 asp .net 项目中,我的主页接收 URL 作为参数,我需要在内部下载然后处理它。我知道我可以使用 WebClient 的 DownloadFile 方法,但是我想避免恶意用户将 url 提供给一个巨大的文件,这将从我的服务器产生不必要的流量。为了避免这种情况,我正在寻找一种解决方案来设置 DownloadFile 将下载的最大文件大小。

提前谢谢你,

jack

最佳答案

如果不使用 flash 或 silverlight 文件上传控件,就无法“干净地”执行此操作。在不使用这些方法的情况下,您可以做的最好的事情是在您的 web.config 文件中设置 maxRequestLength

例子:

<system.web>
<httpRuntime maxRequestLength="1024"/>

上面的示例将文件大小限制为 1MB。如果用户尝试发送任何更大的内容,他们将收到一条错误消息,指出已超过最大请求长度。虽然这不是一个漂亮的消息,但如果您愿意,可以覆盖 IIS 中的错误页面,使其尽可能匹配您的站点。

因评论而编辑:

因此,您可能使用了几种方法来执行从 URL 获取文件的请求,因此我将发布 2 种可能的解决方案。首先是使用 .NET WebClient:

// This will get the file
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(DownloadCompleted);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
webClient.DownloadFileAsync(new Uri("http://www.somewhere.com/test.txt"), @"c:\test.txt");

private void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
WebClient webClient = (WebClient)(sender);
// Cancel download if we are going to download more than we allow
if (e.TotalBytesToReceive > iMaxNumberOfBytesToAllow)
{
webClient.CancelAsync();
}
}

private void DownloadCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
// Do something
}

另一种方法是在下载之前执行基本的网络请求以检查文件大小:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri("http://www.somewhere.com/test.txt"));
webRequest.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
Int64 fileSize = webResponse.ContentLength;
if (fileSize < iMaxNumberOfBytesToAllow)
{
// Download the file
}

希望这些解决方案中的一个能帮助或至少让您走上正确的道路。

关于.net - 限制 WebClient DownloadFile 最大文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com