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