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.exex.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 に答える