6

我不断收到“只允许图像”,我尝试了“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";
    }
}
4

3 回答 3

6

你的情况不对,应该是这样的:

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";
    }
于 2013-10-12T12:06:23.347 回答
4

@volpav 的答案将解决您的问题,但这么大if并不是处理问题的最干净的方法。

更优雅的是定义一个接受的扩展列表并检查是否ext在列表中。这样做的好处是,如果您以后必须更改有效类型,则更容易维护,并且如果需要,您可以使扩展由用户定义。

在下面的示例中,我为我的类定义了一个常量(只读变量),其中包含一个包含所有异常的数组,并在验证时使用Contains()扩展方法测试其中是否ext存在UploadFile

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 中使用这个列表来指示哪些是例外扩展,而不是让用户猜测什么是有效的图像类型(毕竟,除了你拥有的图像类型之外,还有其他图像类型包括)。

于 2013-10-12T12:17:57.437 回答
3

您检查有效扩展的条件在逻辑上是不正确的(总是计算为true)。它应该是这样的(||替换为&&):

if (ext.ToLower() != ".jpg" && ext.ToLower() != ".png" && ext.ToLower() != ".gif" && ext.ToLower() != ".jpeg")
{
    return "Only images are allowed";
}
于 2013-10-12T12:05:36.910 回答