7

ユーザーがファイルをアップロードできるファイルアップロード機能があります。ユーザーが特定の種類のファイルをアップロードできないように制限したい。許可されているタイプは、.doc、.xlsx、.txt、.jpegです。

どうすればこれを行うことができますか?

これは私の実際のファイルアップロードコードです:

      public ActionResult UploadFile(string AttachmentName, BugModel model)
       {            
        BugModel bug = null;
        if (Session["CaptureData"] == null)
        {
            bug = model;
        }
        else
        {
            bug = (BugModel)Session["CaptureData"];
        }
        foreach (string inputTagName in Request.Files)
        {
            HttpPostedFileBase file1 = Request.Files[inputTagName];
            if (file1.ContentLength > 0)
            {
                string path = "/Content/UploadedFiles/" + Path.GetFileName(file1.FileName);
                string savedFileName = Path.Combine(Server.MapPath("~" + path));
                file1.SaveAs(savedFileName);
                BugAttachment attachment = new BugAttachment();
                attachment.FileName = "~" + path.ToString();
                attachment.AttachmentName = AttachmentName;
                attachment.AttachmentUrl = attachment.FileName;
                bug.ListFile.Add(attachment);
                model = bug;
                Session["CaptureData"] = model;
            }
        }
        ModelState.Clear();
        return View("LoadBug", bug);
    }
4

3 に答える 3

19

最初に確認することは、に含まれるファイル拡張子file1.FileNameが許可された拡張子のいずれかと一致するかどうかです。次に、ユーザーが他のファイル タイプの名前を許可された拡張子に変更していないことを本当に確認したい場合は、ファイルの内容を調べて、それが許可されているタイプの 1 つであるかどうかを認識する必要があります。

ファイル拡張子が事前定義された拡張子のリストに属しているかどうかを確認する方法の例を次に示します。

var allowedExtensions = new[] { ".doc", ".xlsx", ".txt", ".jpeg" };
var extension = Path.GetExtension(file1.FileName);
if (!allowedExtensions.Contains(extension))
{
    // Not allowed
}
于 2012-08-23T06:50:35.733 に答える
8
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class AllowedFileExtensionAttribute : ValidationAttribute
{
    public string[] AllowedFileExtensions { get; private set; }
    public AllowedFileExtensionAttribute(params string[] allowedFileExtensions)
    {
        AllowedFileExtensions = allowedFileExtensions;
    }
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var file = value as HttpPostedFileBase;
        if (file != null)
        {
            if (!AllowedFileExtensions.Any(item => file.FileName.EndsWith(item, StringComparison.OrdinalIgnoreCase)))
            {
                return new ValidationResult(string.Format("{1} için izin verilen dosya uzantıları : {0} : {2}", string.Join(", ", AllowedFileExtensions), validationContext.DisplayName, this.ErrorMessage));
            }
        }
        return null;
    }
}

モデルでの使用

    [AllowedFileExtension(".jpg", ".png", ".gif", ".jpeg")]
    public HttpPostedFileBase KategoriResmi { get; set; }
于 2015-12-30T11:48:59.510 に答える
7

ContentTypeのプロパティを使用してHttpPostedFileBase、ファイル タイプ (MIME タイプ) の基本的なチェックを行うことができます。ここで Content-Type プロパティに関する MSDN のページを参照してください。

これを行う1つの方法は次のとおりです。

private static bool IsValidContentType(string contentType)
{
    string ct = contentType.ToLower();

    return ((ct == "application/msword") || (ct == "application/pdf") || (ct == "application/vnd.openxmlformats-officedocument.wordprocessingml.document"));
}

等..

ただし、より詳細な検査を行うには、ファイルの内容を検査する必要があります。ファイル拡張子を変更するのは簡単です..

于 2012-08-23T06:53:11.387 に答える