人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SWF upload Frontというフレームワークを使用させてもらって複数ファイルのアップロードに挑戦しています。
アップロードはうまく出来るようになったのですが、エラー処理に苦労しています。
半角数字以外のファイルを指定した場合にエラーを表示してアップロード処理をしないようにしたいのですが、どのようにすればよいでしょうか?

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

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

●質問者: shirokuma2339
●カテゴリ:インターネット ウェブ制作
✍キーワード:swf アップロード エラー ソース ファイル
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● rouge_2008
●100ポイント

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

「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側で処理して

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

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

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


2 ● rouge_2008
●100ポイント ベストアンサー

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

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

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

「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/

◎質問者からの返答

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

今から試してみます。

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

追記

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

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

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ