SWF upload Frontというフレームワークを使用させてもらって複数ファイルのアップロードに挑戦しています。

アップロードはうまく出来るようになったのですが、エラー処理に苦労しています。
半角数字以外のファイルを指定した場合にエラーを表示してアップロード処理をしないようにしたいのですが、どのようにすればよいでしょうか?

現在はエラーが表示されずに、アップロード処理がされてしまいます。
ソース等を教えていただければとても嬉しいです。
よろしくお願いします。

SWF upload front 説明ページ
http://www.furuta-lab.jp/member/kamechan/index.php?SWFUploadFront

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/11 15:45:45
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351

ポイント100pt

現在はファイル選択後に、問題が無ければすぐアップロード処理が開始される設定になっていますが、そのままの状態で任意のメッセージを表示する方法は分かりません。

ファイル選択とアップロードを分ける場合でしたら、以下の方法で可能でした。

※複数ファイルのアップロードも可能になります。

「handlers.js」

14行目の「function fileQueued(file)」の処理を以下のように変更します。

function fileQueued(file) {
	try {
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		var fName = file.name;
		if (fName.match(/^[0-9]+\.(jpg|gif|png)$/)) {
//			progress.setStatus("Pending...");
			progress.setStatus("アップロードの準備が出来ました。");
			progress.toggleCancel(true, this);
			document.getElementById("btnUpload").disabled = false;
		} else {
			progress.setError();
			progress.toggleCancel(false);
			progress.setStatus("ファイル名を半角数字にしてからもう一度お試しください。");
			document.getElementById("btnUpload").disabled = true;
		}

	} catch (ex) {
		this.debug(ex);
	}

}

※正規表現の記述に関しては、PHPの場合と同じです。

もしも半角英数字のファイル名を許可したければ、「/^[A-Za-z0-9._-]+$/」としてください。

※上記のように日本語のメッセージを表示する場合は、文字コードをUTF-8にして保存してください。

69行目の次の記述を無効にして、ファイル選択後のアップロード処理を停止します。

//		this.startUpload();

「up.php」

アップロード用のボタンを追加して以下のようにします。(※以下の場合、「Click」の右側に表示します。)

	<span id="spanButtonPlaceHolder"></span>
	<input id="btnUpload" type="button" value='Upload' disabled="disabled" onclick="swfu.startUpload();" style="margin-left: 2px; font-size: 8pt; width:80px; height: 29px;" />

※ファイル選択とアップロードの分離は以下のページを参考にしました。

http://spinnen.jp/swf_simple_demo/

id:shirokuma2339

詳しいご説明をいただきまして、本当にありがとうございます。

今から試してみます。

結果は後ほど追記いたします。

追記

ありがとうございました!

イメージどおりに動かすことができました!

詳しいソースまで記述していただいて大変感謝しております。

javascriptが分からなく、マスターする時間的余裕もなく、

諦めかけていたのにrouge_2008さんのおかげで

プログラムができました。

本当にありがとうございました。

2009/11/11 15:45:23

その他の回答1件)

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント100pt

半角数字の名前のファイルだけアップロードを許可したいのですね?

「upload.php」に以下の記述を加えると、「Upload Error: 500」を表示して処理が中止されます。

※「session_start();」の次の行、「if (!isset($_FILES["Filedata"]) || ~」の前に追加します。

	$upload_name = $_FILES['Filedata']['name'];
	if( preg_match('/[^0-9]+\.(png|jpg|gif)/', $upload_name ) ){
		header("HTTP/1.1 500 Internal Server Error"); // This will trigger an uploadError event in SWFUpload
		exit(0);
	} else if (!isset($_FILES["Filedata"]) || ~(略) // この行のelse までを足します。 (※if以降は同じです。)

※アップロードを許可するファイルの種類を増やす場合は、設定の変更の他に、上記の正規表現の部分にアップロードしたい種類のファイルの拡張子を追加してください。(「|」で区切ってカッコ内に同じように追加します。)

※もしも半角数字ではなくて、半角英数字以外の名前のファイルを拒否したいのであれば、正規表現の部分を次のようにしてください。

/[^-_.+a-zA-Z0-9]+/

id:shirokuma2339

丁寧な解説をいただいてありがとうございます。

いただいたソースを試してみました。

イメージどおりに動くのですが、

出来ればPHP側ではなく、javascript側で処理して

アップロード処理前にブラウザの画面で

「アップロード出来ませんでした」というメッセージを画面に表示したいと思っています。

言葉足らずな質問ですいませんが、解決策をお教え願えれば嬉しく思います。

2009/11/10 13:02:59
id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351ここでベストアンサー

ポイント100pt

現在はファイル選択後に、問題が無ければすぐアップロード処理が開始される設定になっていますが、そのままの状態で任意のメッセージを表示する方法は分かりません。

ファイル選択とアップロードを分ける場合でしたら、以下の方法で可能でした。

※複数ファイルのアップロードも可能になります。

「handlers.js」

14行目の「function fileQueued(file)」の処理を以下のように変更します。

function fileQueued(file) {
	try {
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		var fName = file.name;
		if (fName.match(/^[0-9]+\.(jpg|gif|png)$/)) {
//			progress.setStatus("Pending...");
			progress.setStatus("アップロードの準備が出来ました。");
			progress.toggleCancel(true, this);
			document.getElementById("btnUpload").disabled = false;
		} else {
			progress.setError();
			progress.toggleCancel(false);
			progress.setStatus("ファイル名を半角数字にしてからもう一度お試しください。");
			document.getElementById("btnUpload").disabled = true;
		}

	} catch (ex) {
		this.debug(ex);
	}

}

※正規表現の記述に関しては、PHPの場合と同じです。

もしも半角英数字のファイル名を許可したければ、「/^[A-Za-z0-9._-]+$/」としてください。

※上記のように日本語のメッセージを表示する場合は、文字コードをUTF-8にして保存してください。

69行目の次の記述を無効にして、ファイル選択後のアップロード処理を停止します。

//		this.startUpload();

「up.php」

アップロード用のボタンを追加して以下のようにします。(※以下の場合、「Click」の右側に表示します。)

	<span id="spanButtonPlaceHolder"></span>
	<input id="btnUpload" type="button" value='Upload' disabled="disabled" onclick="swfu.startUpload();" style="margin-left: 2px; font-size: 8pt; width:80px; height: 29px;" />

※ファイル選択とアップロードの分離は以下のページを参考にしました。

http://spinnen.jp/swf_simple_demo/

id:shirokuma2339

詳しいご説明をいただきまして、本当にありがとうございます。

今から試してみます。

結果は後ほど追記いたします。

追記

ありがとうございました!

イメージどおりに動かすことができました!

詳しいソースまで記述していただいて大変感謝しております。

javascriptが分からなく、マスターする時間的余裕もなく、

諦めかけていたのにrouge_2008さんのおかげで

プログラムができました。

本当にありがとうございました。

2009/11/11 15:45:23
  • id:rouge_2008
    一部間違いがありましたので訂正します。
    PHPの方ですが、半角数字以外のファイル名を拒否する場合の記述を間違えていました。
    正しくは以下のようになります。
    /^([0-9]*[^0-9]+[0-9]*){1,}\.(png|gif|jpg)$/

    大変失礼しました。

    ※JavaScriptによる処理の方は、許可する場合の正規表現ですので、そのままで大丈夫です。

    たくさんのポイントといるかをありがとうございました。m(__)m

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません