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

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

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

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

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

 MyFileUploadControl.PostedFile.ContentLength; 

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

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

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

您可以通过以下步骤在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."; } } 

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

   . . .    . . .        

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

你可以在Safari和FF上完成它

  alert(file_field.files[0].fileSize) 

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

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

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