如何在上传时检查文件大小

时间:2009-07-05 20:14:42

标签: c# asp.net

使用asp.net和C#上传过程中检查文件大小的最佳方法是什么?我可以通过改变我的web.config上传大文件而不会有任何问题。当上传的文件超过我允许的最大文件大小时,我的问题就出现了。

我已经研究过使用activex对象,但这不是跨浏览器兼容的,也不是解决方案的最佳答案。我需要它是跨浏览器兼容的,如果可能的话,并支持IE6(我知道你在想什么!!但是我的应用程序用户中有80%是IE6,不幸的是,这不会很快改变)。

有没有任何开发人员遇到同样的问题?如果是这样,你是如何解决的?

6 个答案:

答案 0 :(得分:18)

如果您使用System.Web.UI.WebControls.FileUpload控件:

MyFileUploadControl.PostedFile.ContentLength;

返回已发布文件的大小(以字节为单位)。

答案 1 :(得分:9)

这是我在上传文件时所做的,它可能对你有帮助吗?我会检查文件大小等。

//did the user upload any file?
            if (FileUpload1.HasFile)
            {
                //Get the name of the file
                string fileName = FileUpload1.FileName;

            //Does the file already exist?
            if (File.Exists(Server.MapPath(ConfigurationManager.AppSettings["fileUploadPath"].ToString() + fileName)))
            {
                PanelError.Visible = true;
                lblError.Text = "A file with the name <b>" + fileName + "</b> already exists on the server.";
                return;
            }

            //Is the file too big to upload?
            int fileSize = FileUpload1.PostedFile.ContentLength;
            if (fileSize > (maxFileSize * 1024))
            {
                PanelError.Visible = true;
                lblError.Text = "Filesize of image is too large. Maximum file size permitted is " + maxFileSize + "KB";
                return;
            }

            //check that the file is of the permitted file type
            string fileExtension = Path.GetExtension(fileName);

            fileExtension = fileExtension.ToLower();

            string[] acceptedFileTypes = new string[7];
            acceptedFileTypes[0] = ".pdf";
            acceptedFileTypes[1] = ".doc";
            acceptedFileTypes[2] = ".docx";
            acceptedFileTypes[3] = ".jpg";
            acceptedFileTypes[4] = ".jpeg";
            acceptedFileTypes[5] = ".gif";
            acceptedFileTypes[6] = ".png";

            bool acceptFile = false;

            //should we accept the file?
            for (int i = 0; i <= 6; i++)
            {
                if (fileExtension == acceptedFileTypes[i])
                {
                    //accept the file, yay!
                    acceptFile = true;
                }
            }

            if (!acceptFile)
            {
                PanelError.Visible = true;
                lblError.Text = "The file you are trying to upload is not a permitted file type!";
                return;
            }

            //upload the file onto the server
            FileUpload1.SaveAs(Server.MapPath(ConfigurationManager.AppSettings["fileUploadPath"].ToString() + fileName));
        }`

答案 2 :(得分:6)

您可以通过以下步骤在asp.net中进行检查:

protected void UploadButton_Click(object sender, EventArgs e)
{
    // Specify the path on the server to
    // save the uploaded file to.
    string savePath = @"c:\temp\uploads\";

    // Before attempting to save the file, verify
    // that the FileUpload control contains a file.
    if (FileUpload1.HasFile)
    {                
        // Get the size in bytes of the file to upload.
        int fileSize = FileUpload1.PostedFile.ContentLength;

        // Allow only files less than 2,100,000 bytes (approximately 2 MB) to be uploaded.
        if (fileSize < 2100000)
        {

            // Append the name of the uploaded file to the path.
            savePath += Server.HtmlEncode(FileUpload1.FileName);

            // Call the SaveAs method to save the 
            // uploaded file to the specified path.
            // This example does not perform all
            // the necessary error checking.               
            // If a file with the same name
            // already exists in the specified path,  
            // the uploaded file overwrites it.
            FileUpload1.SaveAs(savePath);

            // Notify the user that the file was uploaded successfully.
            UploadStatusLabel.Text = "Your file was uploaded successfully.";
        }
        else
        {
            // Notify the user why their file was not uploaded.
            UploadStatusLabel.Text = "Your file was not uploaded because " + 
                                     "it exceeds the 2 MB size limit.";
        }
    }   
    else
    {
        // Notify the user that a file was not uploaded.
        UploadStatusLabel.Text = "You did not specify a file to upload.";
    }
}

答案 3 :(得分:4)

在Web.Config文件中添加这些行 普通文件上传大小为4MB。这里有KB中提到的system.web maxRequestLength和字节中的system.webServer maxAllowedContentLength

    <system.web>
      .
      .
      .
      <httpRuntime executionTimeout="3600" maxRequestLength="102400" useFullyQualifiedRedirectUrl="false" delayNotificationTimeout="60"/>
    </system.web>


    <system.webServer>
      .
      .
      .
      <security>
          <requestFiltering>
            <requestLimits maxAllowedContentLength="1024000000" />
            <fileExtensions allowUnlisted="true"></fileExtensions>
          </requestFiltering>
        </security>
    </system.webServer>

如果您想知道maxFile中提到的web.config上传大小,请使用.cs页面中的给定行

    System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
    HttpRuntimeSection section = config.GetSection("system.web/httpRuntime") as HttpRuntimeSection;

     //get Max upload size in MB                 
     double maxFileSize = Math.Round(section.MaxRequestLength / 1024.0, 1);

     //get File size in MB
     double fileSize = (FU_ReplyMail.PostedFile.ContentLength / 1024) / 1024.0;

     if (fileSize > 25.0)
     {
          ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "Alert", "alert('File Size Exceeded than 25 MB.');", true);
          return;
     }

答案 4 :(得分:2)

你可以通过

在Safari和FF上完成
<input name='file' type='file'>    

alert(file_field.files[0].fileSize)

答案 5 :(得分:0)

我们目前正在使用NeatUpload上传文件。

虽然这样做会检查上传后的尺寸,因此可能无法满足您的要求,虽然它可以选择使用SWFUPLOAD上传文件和检查尺寸等,但可以设置选项,使其不会使用这个组件。

由于他们回发到回发处理程序的方式,也可以显示上传的进度条。如果使用内容大小属性的文件大小超出了您所需的大小,您也可以在处理程序的早期拒绝上传。