如何在asp.net中向fileupload控件添加过滤器?我想要一个Word模板文件(.dot)的过滤器。
答案 0 :(得分:4)
你也可以做一个javascript替代过滤它服务器端(你可能也想这样做)但是这样可以节省客户端花费时间等待上传完成只是为了找出它是错误的类型。
http://javascript.internet.com/forms/upload-filter.html
所以基本上你只需要在提交时运行一个javascript函数来解析上传文件的扩展名,如果它的类型不正确就给它们一个警告。
你也可以使用document.forms [0] .submit();而不是传递表单引用(因为ASP.NET实际上只使用一个表单(除非你做一些时髦的事情))
答案 1 :(得分:2)
string fileName = fuFiles.FileName;
if(fileName.Contains(".dot"))
{
fuFiles.SaveAs(Server.MapPath("~/Files/" + fileName));
}
答案 2 :(得分:2)
如果您要使用标准浏览器的文件选择器过滤文件扩展名客户端/侧,则无法进行。 要做到这一点,你必须使用混合类型的上传,例如SWFUpload,基于闪存上传系统(这是一个非常好的技术:它允许你发布多个文件)。
您在标准模式下唯一能做的就是过滤已发布的文件,我建议使用System.IO.Path命名空间实用程序:
if (Path.GetExtension(upFile.FileName).ToUpper().CompareTo(".DOT") == 0)
{
/* do what you want with file here */
}
答案 3 :(得分:1)
检查上传文件服务器端的文件名:
FileUpload1.PostedFile.FileName
除非你想在客户端上使用java或类似的东西,否则在将上传的文件发送到服务器之前,你真的没有多少办法过滤。
答案 4 :(得分:1)
这里我有一个小方法,我用来过滤名为fuLogo的fileupload控件可以上传哪些类型的文件。
if (fuLogo.HasFile)
{
int counter = 0;
string[] fileBreak = fuLogo.FileName.Split(new char[] { '.' });
logo = Server.MapPath("../Images/Logos/" + fileBreak[0] + counter.ToString()+ "." + fileBreak[1]);
if (fileBreak[1].ToUpper() == "GIF" || fileBreak[1].ToUpper() == "PNG")
{
while (System.IO.File.Exists(logo))
{
counter++;
logo = Server.MapPath("../Images/Logos/" + fileBreak[0] + counter.ToString() + "." + fileBreak[1]);
}
}
else
{
cvValidation.ErrorMessage = "This site does not support any other image format than .Png or .Gif . Please save your image in one of these file formats then try again.";
cvValidation.IsValid = false;
}
fuLogo.SaveAs(logo);
}
基本上,我首先遍历目录以查看文件是否已存在。如果文件存在(例如picture0.gif),它将增加计数器(to picture1.gif)。如果他们的图片具有相同的名称,它可以防止不同的用户覆盖彼此的图片。