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のどのブラウザからでも送られるファイル名をチェックし、問題のあるファイル名ならば送信できない(アラートを表示)したいのです。
有識者のかた、よろしく御教授ください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>(JavaScriptで絶対パスをGetした場合)では「/」がセパレータとなっているようです。



質問の趣旨を勘違いしていたようです。ごめんなさい。m(_ _)m

Javascriptで絶対パスをGetするのではなく、INPUTタグのValueを引いてもダメなんですか?
とするとJavascriptではなくCGI側で判断してするしかないのではないでしょうか?

とりあえず、Web検索で見つけたCGIのURLをつけます。
参考にもならなくなってしまってすみませんxxx

参考URL:http://obata.sinnet.ne.jp/cgi/imgboard.5cgi
    • good
    • 0

ソースで提案できなくて申し訳ありませんが、下記のような方法では取れないでしょうか?



(イベントはONCLICKがいいかと思います。)
1.正規表現を用いて、ファイル名のみを抽出
送信されたファイル名の最後のセパレータ(Macの場合は「:」、Winの場合は「\」)の後ろ側全て、という抽出方法で、取れると思います。

2.抽出したファイル名から使用不可の文字を検出

3.使用不可の文字があればアラート、そうでなければ(CGIへ?)SUBMIT

なにがしかのヒントになれば幸いです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2000/12/28 14:04

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qinput type="file"のvalue監視

input="file"のvalue値が変更されたら別のテキストフィールドに表示するというScriptを書いたのですが動作してくれません。
input="file"ではなく普通のテキストフィールドならば動作します。
fileフィールドでは動作しないのでしょうか。それとも書き方がまずいのでしょうか。

以下、ソースです。

<html>
<head>
<title>test</title>
<script type="text/javascript" src="/javascript/prototype.js"></script>
</head>
<body>
<form action="" enctype="multipart/form-data" method="post">
<input id="file_test" name="file_test" type="file">
<br>
<div id="result">表示</div>
<script type="text/javascript"><!--
window.onload = function() {
new Form.Element.Observer('file_test', 1, function(element, value) {
document.getElementById('result').innerHTML = value;
});
}
//--></script>
</form>
</body>
</html>


よろしくお願いします。

input="file"のvalue値が変更されたら別のテキストフィールドに表示するというScriptを書いたのですが動作してくれません。
input="file"ではなく普通のテキストフィールドならば動作します。
fileフィールドでは動作しないのでしょうか。それとも書き方がまずいのでしょうか。

以下、ソースです。

<html>
<head>
<title>test</title>
<script type="text/javascript" src="/javascript/prototype.js"></script>
</head>
<body>
<form action="" enctype="multipart/form-data" method="post">
...続きを読む

Aベストアンサー

type="file"は、ブラウザごとに特にセキュリティが厳しいので
基本的にはなにもできないと認識しておいた方がよいでしょう。

Qdocument.writeをinput type="text"の value値に

超初心者です。
下記の式にてPHPよりjavascriptにてHTMLに書き出しできましたが
<script type="text/javascript" src="./jsphptest.php?long=3" ></script>この値をHTMLのinput type="text"の value値にデフォルトとして入れたいと思っていますが、どうすればできるのか分かりません。できればボタン等を介さずページをロードすればこPHPからjavascriptのdocument.write値がvalue値に入って欲しいと思っています。簡単なようで難しいことなのでしょうか?どうかご教授よろしくお願いいたします。

Aベストアンサー

それからどうでもいいけど
htmlのタグの順番が適当ですね。

Qのイベントについて

<input type="file">でファイルを選択した時点にイベントを追加する方法を教えてもらえませんか?
セキュリティの観点から無理なのでしょうか?

Aベストアンサー

ファイルを選択した時点で、
onchange イベントが起こりますので、
それを利用すればいいです。
例:
<form name="File">
<input type="file" name="UPLOADFILE" onchange="alert(document.File.UPLOADFILE.value)">
</form>

Q

に文字列をセットするために

<form>
<input type="file" id="x"/>
</form>
<input type="button" onclick="f()" value="push"/>
<script>
function f()
{
var e=document.getElementById("x");
e.value="x.txt";
}
</script>

としてもセットできません

<form>
<input type="text" id="x"/>
</form>
<input type="button" onclick="f()" value="push"/>
<script>
function f()
{
var e=document.getElementById("x");
e.value="x.txt";
}
</script>

であればセットできるのです
どうしたらセットできるでしょうか?

Aベストアンサー

Minefield 3.0a1で実験を行いました。
おっしゃる状況が再現できました。

参照クリック後のinput要素のvalue値を調べた時は問題なさそうだったので

Console2を用いてエラーを見てみたところ
エラー: Security error = NS_ERROR_DOM_SECURITY_ERR

と、セキュリティ上の理由からエラーが出ているようでした。多分仕様だと思います。

ところで...補足要求。
【何がしたくて】これを行いたいのでしょう?

QJavaScriptのfileオブジェクト(input type="file")の選択を初期化したい

fileでユーザーが選択したファイルを、未選択の状態にしたいのですができません。

valueプロパティを""にしてもnullにしても、元の値(ファイルパス)が入ったままです。

HTML:
<input type="file" name="picture_file">

JavaScript:
document.form_main.picture_file.value = "";
alert(document.form_main.picture_file.value);
document.form_main.picture_file.value = null;
alert(document.form_main.picture_file.value);

どうにかして初期化する方法はありますでしょうか?file以外のほかのinput項目は変更せず、また画面遷移もせず実現する必要があります。

Aベストアンサー

type="file"のvalueはセキュリティ上の制約でいぢる事はできません。
http://d.hatena.ne.jp/Mars/20071102
↑こちらのようなやり方しかないかと思います。


人気Q&Aランキング

おすすめ情報