HttpPostedFile.FileName - IE とは異なります
-
23-08-2019 - |
質問
ASP:File コントロールを使用してファイルをサイトにアップロードすると、FileName プロパティが IE と Firefox で異なります。Firefox ではファイルの名前のみが提供されますが、IE ではファイルへのフルパスが提供されます。
コードを追加してこれを回避しました。
Dim FileName As String = file.FileName
If FileName.LastIndexOf("\") > 0 Then
FileName = FileName.Substring(FileName.LastIndexOf("\") + 1)
End If
しかし、なぜブラウザごとに異なるのかはわかりません。この理由を知っている人はいますか?
ありがとう。
解決
これはセキュリティ/プライバシーの問題であり、Firefox/Mozilla は適切に対応しており、アドイン、アプレット、Silverlight、フラッシュ、またはその他のメカニズムがなければ完全なパスを取得する方法はありません。
Mozilla の立場に関する詳細情報は次のとおりです。
https://developer.mozilla.org/en/Updating_web_applications_for_Firefox_3
のセクションを参照してください。 「セキュリティの変更」 -> 「ファイルアップロード」フィールド
IE もこれに倣って、一貫性のある安全な環境を実現してくれることを願っています。
他のヒント
IEとChromeでテストし、このための簡単な回避策
new FileInfo(myHttpPostedFileBase.FileName).Name
これは、あなたが常にパスが含まれている場合でも、ファイル名のみを取得確保されます。
IE8 では、この動作が変更され、完全なパスではなくファイル名のみが渡されます。;-)
IE8 の変更点について説明した IE ブログ投稿の詳細とリンク:http://blogs.msdn.com/b/webtopics/archive/2009/07/27/uploading-a-file-using-fileupload-control-fails-in-ie8.aspx
ファイル名を解析しようとしているサーバーサイド アプリはチェックする必要がありますが、チェックする必要はありません。 期待する ファイル名にはバックスラッシュが必要です。
IE8 ユーザー設定の上書き:http://blogs.msdn.com/blogfiles/webtopics/WindowsLiveWriter/FileUploadcontrol を使用したファイルのアップロードfail_167/clip_image002_2.jpg
また、ファイル名のみを返すPath.GetFileName(File.FileName)を使用することができます。 例:
Dim File As HttpPostedFile = context.Request.Files("txtFile")
' let's FileName is "d:\temp\1.txt"
Dim FileName As String = Path.GetFileName(File.FileName)
' FileName will be "1.txt"