2013-10-12 15 views
6

「画像のみが許可されています」と表示され、「file.PostedFile.FileName」も動作していませんでした。投稿ファイル拡張子asp.net

このコードは別のクラスで書かれている。..

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"; 
    } 
} 
+0

あなたはこの方法にどのようなタイプのフィクルを渡していますか? –

+0

File.Extention() –

答えて

6

あなたの条件が間違っている、それは次のようにする必要があります:

if (ext.ToLower() != ".jpg" && ext.ToLower() != ".png" && ext.ToLower() != ".gif" && ext.ToLower() != ".jpeg") 
{ 
return "Only images are allowed"; 
} 
else 
{ 
///statement 
} 

OR

if (ext.ToLower() == ".jpg" || ext.ToLower() == ".png" || ext.ToLower() == ".gif" || ext.ToLower() == ".jpeg") 
    { 

    ///statement 
    } 
    else 
    { 
return "Only images are allowed"; 
    } 
+1

@Anas ..をコンパイラの観点から使用することはできません.2番目の方が良いです。これを使用してください。 – NMathur

3

有効な拡張子をチェックするあなたの条件は(常にtrueに評価される)論理的に間違っています。これは、(||&&に置き換えられます)このようにする必要があります:

if (ext.ToLower() != ".jpg" && ext.ToLower() != ".png" && ext.ToLower() != ".gif" && ext.ToLower() != ".jpeg") 
{ 
    return "Only images are allowed"; 
} 
4

をvolpavの答え@意志あなたの問題を解決してくださいが、その大きいifは問題を処理する最もクリーンな方法ではありません。

受け入れられた拡張機能のリストを定義し、extがリストに含まれているかどうかを確認することが、より洗練されています。この利点は、後で有効な型を変更しなければならない場合や、それが望ましい場合に拡張子をユーザー定義可能にする必要がある場合には、保守が容易であることです。例では

UploadFile

に検証するときに、私はすべての例外を持つ配列が含まれている私のクラスのための定数(うまく読み取り専用変数)を定義し、 extがその中に存在するかどうかをテストするために Contains()拡張メソッドを使用しています下の

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でこのリストを使用して例外を拡張したものを示すことができます。あなたが含まれているものよりも)。

関連する問題