[英]get posted file extension asp.net
我一直得到“只允许图像”,我试过“file.PostedFile.FileName”也不行!
这段代码是在一个单独的类中编写的..
public static String UploadFile(FileUpload file, String type, out String filename)
{
String ext = System.IO.Path.GetExtension(file.FileName);
filename = "";
if (file.PostedFile.ContentLength > 2000000)
{
return "File is larger than 2 MB";
}
else if (type != "File")
{
if (ext.ToLower() != ".jpg" || ext.ToLower() != ".png" || ext.ToLower() != ".gif" || ext.ToLower() != ".jpeg")
{
return "Only images are allowed";
}
else
{
filename = System.IO.Path.GetRandomFileName() + "_" + file.PostedFile.FileName;
String root = HttpContext.Current.Server.MapPath("~/Images/");
file.SaveAs(root + type + "/" + filename);
return "Success";
}
}
else
{
filename = System.IO.Path.GetRandomFileName() + "_" + file.PostedFile.FileName;
String root = HttpContext.Current.Server.MapPath("~/Files/");
file.SaveAs(root + filename);
return "Success";
}
}
你的情况有误,应该如下:
if (ext.ToLower() != ".jpg" && ext.ToLower() != ".png" && ext.ToLower() != ".gif" && ext.ToLower() != ".jpeg")
{
return "Only images are allowed";
}
else
{
///statement
}
要么
if (ext.ToLower() == ".jpg" || ext.ToLower() == ".png" || ext.ToLower() == ".gif" || ext.ToLower() == ".jpeg")
{
///statement
}
else
{
return "Only images are allowed";
}
@volpav的答案将解决你的问题,但是if
不是最简单的方法来处理问题。
更优雅的是定义接受的扩展列表并检查列表中是否有ext
。 这样做的好处是,如果您以后必须更改有效类型,则更容易维护,并且如果需要,您可以使扩展用户可定义。
在下面的例子中,我为我的类定义一个常量(well readonly变量),它包含一个包含所有异常的数组,并使用Contains()
扩展方法测试在UploadFile
验证时是否存在ext
public static readonly string[] VALID_EXTENSIONS =
new string[4] { ".png", ".jpg", ".gif", ".jpeg" };
// in UploadFile ...
if (!VALID_EXTENSIONS.Contains(ext.ToLower())) {
return "Only images are allowed";
}
通过在上面的代码中使其静态,我可以在UI中使用此列表来指示什么是例外扩展,而不是让用户猜测什么是有效的图像类型(毕竟,除了你有的那些之外,还有其他图像类型包括在内)。
检查有效扩展的条件在逻辑上是不正确的(始终求值为true
)。 它应该是这样的( ||
替换为&&
):
if (ext.ToLower() != ".jpg" && ext.ToLower() != ".png" && ext.ToLower() != ".gif" && ext.ToLower() != ".jpeg")
{
return "Only images are allowed";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.