使用asp.net和C#上传过程中检查文件大小的最佳方法是什么?我可以通过改变我的web.config上传大文件而不会有任何问题。当上传的文件超过我允许的最大文件大小时,我的问题就出现了。
我已经研究过使用activex对象,但这不是跨浏览器兼容的,也不是解决方案的最佳答案。我需要它是跨浏览器兼容的,如果可能的话,并支持IE6(我知道你在想什么!!但是我的应用程序用户中有80%是IE6,不幸的是,这不会很快改变)。
有没有任何开发人员遇到同样的问题?如果是这样,你是如何解决的?
答案 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上传文件和检查尺寸等,但可以设置选项,使其不会使用这个组件。
由于他们回发到回发处理程序的方式,也可以显示上传的进度条。如果使用内容大小属性的文件大小超出了您所需的大小,您也可以在处理程序的早期拒绝上传。