ASPでファイルアップロードをしようとしていています。
そのときにファイルパスを取得するために、
VBに<input type=file>の値をを渡して、dir関数を使ってチェックしたのですが、
そうすると、サーバ側に存在するかを確認して、
「存在しない」となってしまいます。
クライアントに存在するかを確認する方法は有りますでしょうか?
よろしくお願いします。
> クライアントに存在するかを確認する方法は有りますでしょうか?
Web アプリでは基本的に、クライアントのリソースにアクセスする事はできません。
それが出来てしまうと、
『アクセスしただけで、HDD 上にどんなファイルがあるかを
Web サーバに読み取られてしまうサイト』
が作成可能になってしまうわけで、セキュリティホールになりますよね。
抜け道があるとすれば、VB6 等で ActiveX コントロールを生成し、
それを HTML ページに貼って使うことぐらいかと。
(Web 版のウィルスチェッカーなどで使われている手法です)
回答、ありがとうございます。
なるほど、そう言われるとそうですね。
質問を少し変えます。
Yahooのブリーフケース等のファイル置き場は
「存在しないファイルです。」等のメッセージを表示しますが、
あれは、どのような仕組みになっているとおもいますか?
今回、作成したいのがクライアントがWEBからアップロードしたファイルを
「WEB上で共有したい」と言うことなのです。
よろしくお願いします。
> 「存在しないファイルです。」等のメッセージを表示しますが、
> あれは、どのような仕組みになっているとおもいますか?
その機能を使った事がないので分かりませんが、アップロード時の話なら、
恐らくはファイルデータの有無で判定しているのでしょう。
ブラウザによっては、「ファイル名」だけが送信され、フォルダのパス部は
渡さないという実装もありますしね。
> 今回、作成したいのがクライアントがWEBからアップロードしたファイルを
> 「WEB上で共有したい」と言うことなのです。
Web にアップロードするのではなく、
Web からアップロードするのですか?
回答、ありがとうございます。
>その機能を使った事がないので分かりませんが、アップロード時の話なら、
>恐らくはファイルデータの有無で判定しているのでしょう。
ブラウザの機能が関係しているのですね。
確認してみます。
>Web にアップロードするのではなく、
>Web からアップロードするのですか?
ユーザがExcel等のファイルをブラウザから登録して、
「他の人がブラウザからダウンロードして、Excelを見る」
ということをしたいのです。
今の段階では、一旦サーバ上にクライアントのファイル(Excel等)を
「<FORM>タグにenctype="multipart/form-data”属性を追加」
「<form id="Form1" method="post" runat="server" enctype="multipart/form-data">」
で作成しようかと考えています。
よろしくお願いします。
> ブラウザの機能が関係しているのですね。
その方法でいけると思いますよ。(実際にやった事もありますし)
ファイル名は補助的な情報であり、重要なのはファイルの内容です。
0バイトのファイルが送られてきたら拒否すれば良いでしょうし、また、
あまり巨大なファイルがアップロードされてきた場合もまた、
拒否しておくべきかと。
その他の注意点は、ローカル以外のファイルをアップロードできない可能性があるとか、
http://support.microsoft.com/kb/890981/ja
Web サーバが IIS6 の場合、初期設定では 200KB までのファイルしかアップできないとか、
http://support.microsoft.com/kb/327659/ja
サーバ側でのファイル保存先が、別サーバの場合は、ネットワーク共有設定に注意とか、
http://support.microsoft.com/kb/207671/ja
MIME 設定に注意すべし、といったところでしょうか。
# 別案として、一切コーディングせずに文書共有を行うという選択肢も。
# イントラネット環境なら、SharePoint で公開するというのもお手軽で吉。
# インターネット環境なら、WebDAV にするという手もあります。
回答、ありがとうございます。
いろいろな注意点を挙げていただき、ありがとうございます。
すごく参考になりました。
上からの提案で「BASP21」オブジェクトを使用して、
クライアントのファイルをサーバ上に作成して、それをDBのBLOB型に格納。
DBのバイナリファイルを他の人がWEBブラウザからダウンロード
をやってみることになりました。
問題点等ありましたら、よろしくお願いします。
># 別案として、一切コーディングせずに文書共有を行うという選択肢も。
># イントラネット環境なら、SharePoint で公開するというのもお手軽で吉。
># インターネット環境なら、WebDAV にするという手もあります。
こんな方法もあったのですね。
今回は駄目みたいですけど、今後の参考にさせていただきます。
「BASP21」オブジェクトを使用して、WEB上からDBに格納することが出来ました。
本題の
「ASPでファイルアップロード時にファイルパスのチェックをするには?」も
「BASP21」オブジェクトの機能で対応できました。
ありがとうございました。
ツイート | ![]() |