アップロードはうまく出来るようになったのですが、エラー処理に苦労しています。
半角数字以外のファイルを指定した場合にエラーを表示してアップロード処理をしないようにしたいのですが、どのようにすればよいでしょうか?
現在はエラーが表示されずに、アップロード処理がされてしまいます。
ソース等を教えていただければとても嬉しいです。
よろしくお願いします。
SWF upload front 説明ページ
http://www.furuta-lab.jp/member/kamechan/index.php?SWFUploadFront
現在はファイル選択後に、問題が無ければすぐアップロード処理が開始される設定になっていますが、そのままの状態で任意のメッセージを表示する方法は分かりません。
ファイル選択とアップロードを分ける場合でしたら、以下の方法で可能でした。
※複数ファイルのアップロードも可能になります。
「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;" />
※ファイル選択とアップロードの分離は以下のページを参考にしました。
半角数字の名前のファイルだけアップロードを許可したいのですね?
「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]+/
丁寧な解説をいただいてありがとうございます。
いただいたソースを試してみました。
イメージどおりに動くのですが、
出来ればPHP側ではなく、javascript側で処理して
アップロード処理前にブラウザの画面で
「アップロード出来ませんでした」というメッセージを画面に表示したいと思っています。
言葉足らずな質問ですいませんが、解決策をお教え願えれば嬉しく思います。
現在はファイル選択後に、問題が無ければすぐアップロード処理が開始される設定になっていますが、そのままの状態で任意のメッセージを表示する方法は分かりません。
ファイル選択とアップロードを分ける場合でしたら、以下の方法で可能でした。
※複数ファイルのアップロードも可能になります。
「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;" />
※ファイル選択とアップロードの分離は以下のページを参考にしました。
詳しいご説明をいただきまして、本当にありがとうございます。
今から試してみます。
結果は後ほど追記いたします。
追記
ありがとうございました!
イメージどおりに動かすことができました!
詳しいソースまで記述していただいて大変感謝しております。
javascriptが分からなく、マスターする時間的余裕もなく、
諦めかけていたのにrouge_2008さんのおかげで
プログラムができました。
本当にありがとうございました。
詳しいご説明をいただきまして、本当にありがとうございます。
今から試してみます。
結果は後ほど追記いたします。
追記
ありがとうございました!
イメージどおりに動かすことができました!
詳しいソースまで記述していただいて大変感謝しております。
javascriptが分からなく、マスターする時間的余裕もなく、
諦めかけていたのにrouge_2008さんのおかげで
プログラムができました。
本当にありがとうございました。