1

Web フォームに FileUpload コントロール (FileUpload1) と、"Sumbit" ボタン、ラベル、および UserID を含む隠しフィールドがあります。ボタンのクリックイベントに次のコードがあります。

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; 
    }
}

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

4

5 に答える 5

8

存在するかどうかを確認するだけです。

if(File.Exists(myFile)){
  //it was uploaded.
}
于 2009-03-10T20:17:13.897 に答える
4

FileUpload.PostedFile.ContentLengthプロパティを確認できます

于 2009-03-10T20:30:09.560 に答える
2

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

于 2009-03-10T20:17:21.447 に答える
1

うーん....

わかりません。まず、コードで FileUpload.HasFile がコンパイルされません。FileUpload1.HasFile である必要があります。

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

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

于 2009-03-10T20:32:03.393 に答える
1

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

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

追加の検証により、実際にコンテンツが送信されたかどうかを検証することもできます。

AND: フォーム フィールドからの入力を連結して保存パスを作成すると、非常に深刻な脆弱性が発生します (UserID.Valueあなたが言及した POST パラメーターだと思いますか?)。これにより、ユーザーはコンテンツをサーバー上のどこに保存するかを決定でき、さらに悪いことに、既存のファイルを上書きすることもできます!!!

于 2009-03-10T21:06:08.227 に答える