Asp.net FileUpload控件在不应上载文件时上载文件';T
我有一个文件上传表单,它在asp.net 4.0中使用FileUpload控件。在我的上传按钮上,我检查正在提交的文件是否存在以下限制:Asp.net FileUpload控件在不应上载文件时上载文件';T,asp.net,.net,file-upload,upload,controls,Asp.net,.net,File Upload,Upload,Controls,我有一个文件上传表单,它在asp.net 4.0中使用FileUpload控件。在我的上传按钮上,我检查正在提交的文件是否存在以下限制: FileUpload fu = new FileUpload(); if (fu.HasFile) { if ((extension == ".jpg") || (extension == ".png") || (extension == ".gif")) { if (fu.Poste
FileUpload fu = new FileUpload();
if (fu.HasFile)
{
if ((extension == ".jpg") || (extension == ".png") || (extension == ".gif"))
{
if (fu.PostedFile.ContentLength <= 2MB)
{
fu.SaveAs("path"); // save the file on the server
// check file header ...
}
}
}
int iFileSize = file.ContentLength;
if (iFileSize > 1000000) // 1MB approx (actually less though)
{
// File is too big so do something here
return;
}
FileUpload fu=newfileupload();
if(fu.HasFile)
{
if((扩展名=“.jpg”)| |(扩展名=“.png”)| |(扩展名=“.gif”))
{
如果(fu.PostedFile.ContentLength 2MB)没有在客户端上检查并给出我设置的错误,它会上载它,然后客户端收到错误。问题是如果客户端提交1GB文件怎么办?我的意思是,它如何从扩展名和大小验证传递到SaveAs(),我不明白。
有什么意见吗?谢谢!不幸的是,该代码在服务器上运行,这意味着它只能在上传文件后执行这些检查
如果用户试图上载一个非常大的文件,请求长度限制(在web.config中定义)将捕获该文件,一旦达到该限制,上载将中止
除此之外,您确实需要检查服务器上的文件;您应该检查的不仅仅是扩展名。有人可以很容易地将文件的扩展名更改为其他内容。这可能是一个实际问题,也可能不是一个实际问题,但最有可能是!(如果没有其他内容,后续网站用户将在浏览器尝试加载Word文档时看到损坏的图像占位符,就像加载图像一样)如果您使用的是html5,则可以使用FileReader
您可以从客户端验证大小、内容类型
验证后,您可以将其发布到服务器
代码取自:
功能手柄文件选择(evt){
var files=evt.target.files;//文件列表对象
//文件是文件对象的文件列表。请列出一些属性。
var输出=[];
for(var i=0,f;f=files[i];i++){
output.push(“”,escape(f.name),“(”,f.type | | |“n/a”,“)-”,
f、 大小,'字节,上次修改:',
f、 lastModifiedDate?f.lastModifiedDate.toLocaleDateString():“不适用”,
“ ”);
}
document.getElementById('list').innerHTML=''+output.join('')+'
';
}
document.getElementById('files').addEventListener('change',handleFileSelect,false);
文件读取器的多边形填充
这是您的实际代码吗?什么是2MB?它不是字符串或整数。我很惊讶它竟然被编译。您应该有这样的代码:
FileUpload fu = new FileUpload();
if (fu.HasFile)
{
if ((extension == ".jpg") || (extension == ".png") || (extension == ".gif"))
{
if (fu.PostedFile.ContentLength <= 2MB)
{
fu.SaveAs("path"); // save the file on the server
// check file header ...
}
}
}
int iFileSize = file.ContentLength;
if (iFileSize > 1000000) // 1MB approx (actually less though)
{
// File is too big so do something here
return;
}
这不是确切的代码,它只是我的代码的一种更简单的表示形式。谢谢,你可以附加一个客户端事件来验证正在上载的文件的内容。请检查:抱歉,我不会使用html5。不是所有浏览器都支持它。谢谢。@osmiumbin你可以使用polyfilss。我知道了,我现在记得在我的web.config文件中我有设置maxRequestLength=“40960”,这意味着请求一次上载40MB。我的问题是,由于用户可以上载多个文件(每个文件都通过自己的FileUpload控件),如果我将maxRequestLength设置为1MB,那么每个FileUpload控件的大小或所有控件中所有文件大小的总和是多少?所有图像(最大20个)通过点击按钮上传,这是一个请求吗?@osmiumbin这实际上是整个请求;因此,是的,所有文件都将包括在内,再加上HTTP请求的其余部分(如cookie、路径、查询字符串值、其他表单值等)嗯,我能限制每个文件的请求吗?我只是不希望用户能够提交他们想要的任何文件大小。这会消耗带宽和其他不好的东西。谢谢。