简体   繁体   English

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

[英]How to check file size on upload

Whats the best way to check the size of a file during upload using asp.net and C#?使用 asp.net 和 C# 在上传过程中检查文件大小的最佳方法是什么? I can upload large files by altering my web.config without any problems.我可以通过更改我的 web.config 上传大文件而不会出现任何问题。 My issues arises when a file is uploaded which is more than my allowed max file size.当上传的文件超过我允许的最大文件大小时,就会出现我的问题。

I have looked into using activex objects but that is not cross browser compatible and not the best answer to the solution.我已经研究过使用 activex 对象,但这不是跨浏览器兼容的,也不是解决方案的最佳答案。 I need it to be cross browser compatible if possible and to support IE6 (i know what you are thinking!! However 80% of my apps users are IE6 and this is not going to change anytime soon unfortunately).如果可能的话,我需要它跨浏览器兼容并支持 IE6(我知道你在想什么!但是我的应用程序用户中有 80% 是 IE6,不幸的是这不会很快改变)。

Has any dev out there come across the same problem?有没有开发人员遇到过同样的问题? And if so how did you solve it?如果是这样,你是如何解决的?

If you are using System.Web.UI.WebControls.FileUpload control:如果您使用System.Web.UI.WebControls.FileUpload控件:

MyFileUploadControl.PostedFile.ContentLength;

Returns the size of the posted file, in bytes.返回已发布文件的大小(以字节为单位)。

This is what I do when uploading a file, it might help you?这就是我上传文件时所做的,它可能对你有帮助吗? I do a check on filesize among other things.我检查文件大小等。

//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));
        }`

You can do the checking in asp.net by doing these steps:您可以通过执行以下步骤在 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.";
    }
}

Add these Lines in Web.Config file.在 Web.Config 文件中添加这些行。
Normal file upload size is 4MB.正常文件上传大小为 4MB。 Here Under system.web maxRequestLength mentioned in KB and in system.webServer maxAllowedContentLength as in Bytes.这里在 KB 中提到的system.web maxRequestLengthsystem.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>

and if you want to know the maxFile upload size mentioned in web.config use the given line in .cs page如果您想知道web.config提到的maxFile上传大小,请使用.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;
     }

You can do it on Safari and FF simply by你可以在 Safari 和 FF 上简单地通过

<input name='file' type='file'>    

alert(file_field.files[0].fileSize)

We are currently using NeatUpload to upload the files.我们目前正在使用 NeatUpload 上传文件。

While this does the size check post upload and so may not meet your requirements, and while it has the option to use SWFUPLOAD to upload the files and check size etc, it is possible to set the options such that it doesn't use this component.虽然这会在上传后进行大小检查,因此可能无法满足您的要求,并且可以选择使用 SWFUPLOAD 上传文件并检查大小等,但可以设置选项使其不使用此组件.

Due to the way they post back to a postback handler it is also possible to show a progress bar of the upload.由于它们回发到回发处理程序的方式,还可以显示上传的进度条。 You can also reject the upload early in the handler if the size of the file, using the content size property, exceeds the size you require.如果使用内容大小属性的文件大小超过您需要的大小,您还可以在处理程序早期拒绝上传。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM