2009-03-10 19 views
0

WebUploadにはFileUploadコントロール(FileUpload1)と「Sumbit」ボタン、ラベル、UserIDを含む非表示フィールドがあります。ボタンのクリックイベントに次のコードがあります。FileUpload - 実際のファイルがアップロードされたことを確認します。

string path = Server.MapPath("~/userfiles/"); 

if (FileUpload.HasFile) 
{ 
    try 
    { 
     FileUpload1.SaveAs(path + UserID.Value + "/image.jpg"); 
    } 
    catch 
    { 
     Label1.Text = "* unable to upload file"; 
     Label1.Visible = true; 
    } 
} 

実際のファイルをアップロードすると効果的です。しかし、FileUploadのテキストボックスに存在しないファイル名(たとえば、 "c:\ a.jpg"、私のコンピュータには存在しません)を入力し、Sumbitボタンをクリックすると、HasFileはまだtrueを返します。さらに、SaveAs()は例外をスローしません。成功または失敗を示す値を返さないvoid関数です。ファイルが実際にアップロードされたかどうかを確認するにはどうすればよいですか?

答えて

7

存在するかどうかを確認してください。

if(File.Exists(myFile)){ 
    //it was uploaded. 
} 
2

SaveAsを呼び出す前にFile.Existsを使用してファイルが存在するかどうかを確認できます。

3

あなたはFileUpload.PostedFile.ContentLengthプロパティ

1

うーん....

ない私は理解してくださいをチェックすることができます。まず、あなたのコードで、FileUpload.HasFileはコンパイルされません。 FileUpload1.HasFileである必要があります。

私はこれを修正し、あなたのコードを実行すると、ファイルが存在しない場合は、この行はfalseを返します...

ファイルはFile.Exists(パス)を使用してアップロードした後存在するかどうかを確認することができます。ファイルオブジェクトはSystem.IOの一部です。

1

これは実際の質問ではありませんが、特にユーザーがウェブサーバー上の仮想フォルダにファイルをアップロードしたい場合は、ユーザーの入力を検証する必要があります。少なくとも、ファイルのコンテンツタイプが期待どおりかどうか、または.NETフレームワークで使用可能なクラスを使用して画像をフィルタリング(サイズ変更)する必要があります。

あなたがそうしないと、あなたのサイトで任意のコンテンツを共有したり、悪意のあるファイル(特定のウェブブラウザによって実行される可能性のあるスクリプトを含む画像など)をあなたのサーバ上に置くことがあります。

さらに検証を行うと、実際にコンテンツが送信されているかどうかを検証することもできます。

AND:フォームフィールドからの入力を連結して保存パスを構築すると、本当に深刻な脆弱性が発生します(私は​​と言っています)。これにより、ユーザーはサーバー上のどこにコンテンツを保存するかを決めることができ、さらに悪いことに、既存のファイルを上書きすることができます!

関連する問題