• 締切済み

Mac・Winでファイル名チェック後アップロードしたい

ryouchiです。 現在下記環境でWebブラウザよりファイルのアップロードを行うサーバアプリケーションを作成しています。 --- Webサーバ:WindowsNT4.0 SP4+IIS4.0+ColdFusion4.5 クライアント:  Windows 95/98/ME/NT WorkStation   InternetExplorer(4.0/4.5/5.0/5.5)   Netscape Communicator 4.7  MacOS 8.1/8.6/9.04   Netscape Communicator 4.7 --- Macでは「:」はディレクトリセパレータとしてシステムが利用しているので「:」を含むファイル名は使えません。 Windowsでは「/」「\」・・・などは使えません。 NTサーバが認識不可能なファイル名のついたMacのファイルをアップロードする際に、<input type="FILE">で選ばれたファイルがWindowsまたは、Macで使えないファイル名ならばJavaScriptでチェックしアラートを表示するようなことは可能でしょうか? また、<input type="FILE" name="fname">でファイルを選択したとき、このfnameのvalueには絶対パスが入ると思うので単純にvalueの値に未使用の文字が使われているという判断では不十分です。 Macから「Macintosh HD:12/1データ_1.doc」というフォルダ下にあるファイルは「/」が含まれているため送信できないようにしたいのですが、上記のvalueの判断のみでは、「Macintosh HD:12/1フォルダ:データ_1.doc」というデータも絶対パス内に/が入っているため送付できません。 またサーバ内では送信したファイル名はクライアントのマシンで付いていた名前を利用したいので、サーバ側で適当な名前をつけることは考慮しません。 要するに<input type="FILE">を用いたファイルアップロードの際、Mac・Winのどのブラウザからでも送られるファイル名をチェックし、問題のあるファイル名ならば送信できない(アラートを表示)したいのです。 有識者のかた、よろしく御教授ください。

みんなの回答

  • m_nkgw
  • ベストアンサー率47% (42/89)
回答No.2

>(JavaScriptで絶対パスをGetした場合)では「/」がセパレータとなっているようです。 質問の趣旨を勘違いしていたようです。ごめんなさい。m(_ _)m Javascriptで絶対パスをGetするのではなく、INPUTタグのValueを引いてもダメなんですか? とするとJavascriptではなくCGI側で判断してするしかないのではないでしょうか? とりあえず、Web検索で見つけたCGIのURLをつけます。 参考にもならなくなってしまってすみませんxxx

参考URL:
http://obata.sinnet.ne.jp/cgi/imgboard.5cgi
  • m_nkgw
  • ベストアンサー率47% (42/89)
回答No.1

ソースで提案できなくて申し訳ありませんが、下記のような方法では取れないでしょうか? (イベントはONCLICKがいいかと思います。) 1.正規表現を用いて、ファイル名のみを抽出 送信されたファイル名の最後のセパレータ(Macの場合は「:」、Winの場合は「\」)の後ろ側全て、という抽出方法で、取れると思います。 2.抽出したファイル名から使用不可の文字を検出 3.使用不可の文字があればアラート、そうでなければ(CGIへ?)SUBMIT なにがしかのヒントになれば幸いです。

ryouchi
質問者

お礼

さっそくの御回答ありがとうございます。 調べてみた結果、Macの場合はファインダー上では、「:」がセパレータになっているのですが、ブラウザ上(JavaScriptで絶対パスをGetした場合)では「/」がセパレータとなっているようです。 ですから、ファイル名が「test_1/1.pdf」というファイル名(Macではこれはファイル名としてつけられる)は、最後のセパレータ以降を取得すると、「1.pdf」となり、違うファイル名として認識されてしまうのです。 なので、実際の解決方法として、少し悩んでいる次第です。