1

我正在使用 FileUpload 控件来允许用户将文件上传到 SQL 数据库。

我有一个按钮,用于通过 C# 代码加载选定的文件。

但是,如果文件大小为一定大小,则上传失败。我在 C# 代码上有一个断点,当文件大小过大时它永远不会被击中,但当文件大小正常时它会被击中。这是我会检查但断点没有被击中的地方!??!

实现这一点的最佳方法是什么?我应该使用 JavaScript 吗?

按钮后面的 C# 代码如下,但它从未被触发:

protected void buttonAddDocumentType_Click(object sender, EventArgs e)
{
    int size = fileUploadDocument.PostedFile.ContentLength;

    //This is where I'd like to perform the file size check 

    byte[] fileData = new byte[size];

    fileUploadDocument.PostedFile.InputStream.Read(fileData, 0, size);

    WebDataAccess.InsertDocument(Int32.Parse(Request.QueryString["ID"].ToString()), Int32.Parse(comboDocumentTypes.SelectedValue), fileUploadDocument.FileName, fileUploadDocument.PostedFile.ContentType,
                fileUploadDocument.FileBytes.Count(), fileData);

    comboDocumentTypes.SelectedIndex = -1;
}

我正在使用 ASP.Net 4.0

提前致谢。

4

2 回答 2

1

Asp.Net 对文件上传有上限。您可以在 web.config 中配置此限制,并在文件上传事件开始之前验证此范围。

无法使用代码来捕获此错误,因为它发生在任何代码启动之前。

于 2012-05-21T09:32:58.823 回答
0

首先,如果您有大于 4MB 的有效上传,您需要在 web.config 中增加 maxRequestLength,

假设您接受最大 10MB 的文件,将其更改为 16MB,现在您可以在代码中处理任何大于 10MB 的文件,并且任何大于 16MB 的文件都会被 asp.net 运行时拒绝。您不想将 maxRequestLength 更改为一个非常高的数字,因为人们可能会用大文件攻击您的服务器。

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

你可以检查

fileImageControl.PostedFile.InputStream.Length 

打电话之前的财产:

fileImageControl.PostedFile.SaveAs

我总是将所有上传的文件保存到临时目录中,并在将它们保存到最终位置之前对其进行一些检查。您还可以将它们标记为“从 Internet 下载”,因此 Windows 会相应地处理它们(但如果将它们保存到数据库中则不起作用)。

于 2012-05-21T10:16:01.830 回答