Posted at

File UploadをHttpPostedFileBaseで受けるときの挙動の違い

More than 3 years have passed since last update.

従来であればで

public ActionResult DocumentUpload(HttpPostedFileBase data){

var fullPath = data.FileName;

return View();
}

でfullPathには、フルパスが入る。

(例:C:\Data\hoge.zip)

HttpPostedFileBase - FileName

にも、「クライアント上のファイルの名前。ディレクトリ パスを含みます。」と記載あり。

でもブラウザによって挙動が違いそう。


IE11

フルパス取得可能(C:\Data\hoge.zip)

FireFox

ファイル名のみ(hoge.zip)

GoogleChrome

ファイル名のみ(hoge.zip)

Edge

フルパス取得可能(C:\Data\hoge.zip)

といった状況みたいです(2015/8/20現在)

FireFoxの更新を確認したところ

ファイルアップロード用フォーム項目

Firefox のこれまでのバージョンでは、ユーザがファイルをアップロードするために送信する際、

そのファイルのフルパスが Web アプリケーションに公開されてしまう場合がありました。

このプライバシーの懸念は、Firefox 3 で、

ファイル名のみをWeb アプリケーションに公開するよう仕様を変更することで解決されました。

とのことでした。

どちらにしても、ファイルアップロードにクライアント側のフルパスは必要ないので

public ActionResult DocumentUpload(HttpPostedFileBase data){

var fileName= new FileInfo(data.FileName).Name;

return View();
}

みたいな感じで、ファイル名に絞って取得するのがよさそう。

参考