2009-07-05 201 views
13

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

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

有没有发现有同样的问题吗?如果是这样,你是如何解决它的?

+0

感谢您的意见。在尝试了一些建议的解决方案之后,我最终使用了Teleriks RAD上传组件,它允许我做我需要的。 – Cragly 2009-09-04 13:53:38

+0

这可以通过Silverlight或Flash完成。对于Falsh,你可以看到[swfupload](http://www.swfupload.org/)。 – 2009-07-05 20:19:16

+0

swfupload是免费的,很好。多次使用它,它真的回答了这个问题。 +1在这里。 – 2009-07-05 21:48:35

回答

0

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

虽然这样做的大小检查后上传,所以可能不符合您的要求,虽然它可以选择使用SWFUPLOAD上传文件和检查大小等,可以设置的选项,使它不'不要使用这个组件。

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

17

如果您正在使用System.Web.UI.WebControls.FileUpload控制:

MyFileUploadControl.PostedFile.ContentLength; 

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

7

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

//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

您可以通过执行以下步骤来做到的Safari和FF只需

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

alert(file_field.files[0].fileSize) 
5

你可以检查在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."; 
    } 
} 
4

网页中添加这些行。配置文件。
正常文件上传大小为4MB。这里在system.webmaxRequestLength在KB中提到和在system.webServermaxAllowedContentLength在Bytes中。

<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> 

,如果你想知道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; 
    }