0

我想用 上传一些文件jQuery File Upload,但我想通过以下代码过滤文件类型:

public class file : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
            HttpPostedFile postedFile = context.Request.Files["file"];
            string extension = Path.GetExtension(postedFile.FileName).ToLower();
            string[] validExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pps", ".ppsx" };
            if (extension.IndexOf(extension) != -1) 
            {
                        // upload files here
            }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

此代码运行良好,但是当我重命名文件扩展名(例如将x.exe重命名为x.jpg时)上述代码时,接受文件类型并开始上传文件。

我该如何处理这个问题?

4

1 回答 1

0

除非您尝试打开发布的文件,否则您不能绝对确定文件是 X 或 Y 类型(在您的情况下是图像)。

不过,您可以针对您的HttpPostedFile

我使用下面的代码来做到这一点

bool IsImage(string fileName, string contentType, Stream stream)
{
    if (!LooksLikeAnImage(fileName, contentType)) 
        return false;
    try { 
        using (Image image = Image.FromStream(stream)) 
            return true; 
    }
    catch { 
        return false; 
    }
}

bool LooksLikeAnImage(string fileName, string contentType)
{
    if (fileName != null)
    {
        if (Perceived.GetPerceivedType(fileName).PerceivedType == PerceivedType.Image) 
            return true;
        string ct = ContentType.GetRegistryContentType(fileName);
        if (ct != null && ct.StartsWith("image/")) 
            return true;
    }
    return contentType != null && contentType.StartsWith("image/");
}

希望这可以帮助。

于 2013-12-05T14:21:02.717 回答