我有一个在asp.net 4.0中使用FileUpload控件的文件上传表单。在我的上传按钮上,我检查提交的文件是否有这样的限制:
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 ...
}
}
}
问题在于,当我提交视频(显然有不同的扩展名和大小> 2MB)而不是在客户端上检查这个并给出我已设置的错误时,它上传它然后客户端收到错误。如果客户端提交1GB文件会出现问题?!我的意思是,它如何从扩展和大小验证传递到SaveAs(),我无法理解。 任何意见?谢谢!
答案 0 :(得分:2)
不幸的是,该代码在服务器上运行,这意味着它只能在上传文件后进行检查。
如果用户尝试上传非常大的文件,请求长度限制(在web.config中定义)将捕获它,并且一旦达到限制就会中止上传。
除此之外,你真的必须检查服务器上的文件;你应该检查的不仅仅是扩展名。有人可以轻松地将文件的扩展名更改为其他内容。这可能是也可能不是实际问题 - 但最有可能的是! (如果没有别的,后续网站用户会在浏览器尝试加载Word文档时看到损坏的图像占位符,就像它是图像一样)
答案 1 :(得分:0)
如果您使用的是html5,则可以使用FileReader。 FileReader Javascript
<script>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
// files is a FileList of File objects. List some properties.
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
</script>
文件阅读器的polyfills
答案 2 :(得分:0)
这是您的实际代码吗?什么是2MB?它不是字符串或整数。甚至编译我都很惊讶。你应该有这样的东西:
int iFileSize = file.ContentLength;
if (iFileSize > 1000000) // 1MB approx (actually less though)
{
// File is too big so do something here
return;
}