ファイルをアップロードするためにフォームを使用している場合<input id="myFile" type="file" runat="server" />
、サーバー側のコードは、Firefox を使用している場合はフル パスのないファイル名しか表示しませんが、IE では問題なく動作します。
この場合、サーバー側で完全なファイル パスを取得することは可能ですか?
ファイルをアップロードするためにフォームを使用している場合<input id="myFile" type="file" runat="server" />
、サーバー側のコードは、Firefox を使用している場合はフル パスのないファイル名しか表示しませんが、IE では問題なく動作します。
この場合、サーバー側で完全なファイル パスを取得することは可能ですか?
それはいけません。実際には、ほとんどの場合、サーバーにとって重要ではないこの情報を提供するのは IE だけです。少なくとも、FF も Opera もこの情報を提供していません。
[更新] Safariでも試してみましたが、まだパスがありません...誰かがChromeが情報を提供する可能性があると報告しましたが、ベータ版ですが、変更される可能性があります...
おそらく、イントラネットの場合にはそれらが必要になるかもしれません。そのような場合、ユーザーにパスを 2 番目の入力フィールドに貼り付けるように依頼することができます...あまり友好的ではありませんが、少なくともユーザーは情報を提供したことを知ることができます。
実際、なんらかの理由でこの情報が必要な人がいることを知っているので、JavaScript を使用してファイル入力フィールドからパスを取得し、隠しフィールドに入れました。FF 開発者は、それが安全ではないことに気づきました (単純なパスから多くのことを学ぶことができます... ユーザーのログイン名のように!) FF3 でのそのような使用を禁止し、一部の人々はこのリリースに腹を立てました...
参考文献: Firefox 3 のファイル アップロード ボックスについては、Firefox 3 の迷惑: ファイル アップロード コントロールで無効になっているキー入力 ... に記載されています。また、ファイル入力ボックスが無効になっていると、他の多くの問題の中でも、大きなユーザビリティの問題が発生します。
ファイル アップロード ファイルで送信された完全なファイル パスや、信頼できるファイル名またはコンテンツ タイプを確実に取得することはできません。完全なファイルパスを取得したとしても、クライアントのオペレーティング システムのパス区切り文字が何であるか、またはファイル拡張子 (存在する場合) が何かを示しているかどうかはわかりません。
アプリケーションが、アップロードされたアイテムのデフォルトのタイトルをユーザーに与える以上の目的で、送信されたファイルのファイルパス/ファイル名/コンテンツ タイプを必要とする場合、何か問題があり、修正が必要になります。
これについてはすでにコメントで述べましたが、繰り返す必要があると思います。
Microsoft は、イントラネット アプリケーションで使用するファイルへの完全なパスをファイル コントロールに与えることを選択しました。
HTML 仕様では、値に含まれる内容が 1 か所だけに言及されています。
ユーザー エージェントは、value 属性の値を初期ファイル名として使用できます。
ただし、multipart/form-data エンコーディングがどのように見えるべきかの例もあり、ファイル パスは含まれていません。
つまり、IE は標準に違反しており、IE の新しいバージョンであっても、IE をサポートするために他のブラウザーに依存することはできません。