PHP における標準的なテスト用アップロードのテンプレート に対してアップロードしています。 ファイルのアップロードの PHP 側のインターフェイスに合わせてデータを用意して実行します。 PHP では、エラーの場合ページに文字列が出力されるたけなので、その文字列を検索して結果を判断します。 FileReader を使用して、選択したファイルが画像の場合は img 要素で表示し、それ以外ならば FileReader 由来のファイル名と MIME を表示します
<!DOCTYPE html> <html> <head> <meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport"> <title>単純ファイルアップロード</title> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.css"> <link rel="stylesheet" href="https://lightbox.sakura.ne.jp/demo/two-section.css"> <style> #extend { white-space: pre; } </style> <script> $(function(){ // *************************** // form 送信イベント // *************************** $("#frm").on("submit", function(event){ // 本来の処理をキャンセル event.preventDefault(); // 新規送信用オブジェクト var formData = new FormData(); // テストの為、約100K の制限 formData.append("MAX_FILE_SIZE", 1048576); // ファイル var uploadData = $("#target").get(0); formData.append("target", uploadData.files[0]); // オリジナルファイル名 console.log( uploadData.files[0].name ); // ************************************** // サーバ呼び出し // ************************************** $.ajax({ url: "http://localhost/php/upload/php-upload-basic.php", type: "POST", data: formData, processData: false, // jQuery がデータを処理しないよう指定 contentType: false // jQuery が contentType を設定しないよう指定 }) .done(function( data, textStatus ){ console.log( "status:" + textStatus ); // ajax 対応のページでは無いので、ページ上の文字列を検索して判断する if ( data.search(/失敗/) != -1 ) { alert("アップロードに失敗しました"); } }) .fail(function(jqXHR, textStatus, errorThrown ){ console.log( "code:" + jqXHR.status ); console.log( "status:" + textStatus ); console.log( "errorThrown:" + errorThrown ); // エラーメッセージを表示 alert("システムエラーです"); }) .always(function() { }) ; }); // ************************************* // ファイル選択 <input type="file"> // ************************************* $("#target").on("change", function(){ $("#extend").html(""); var reader = new FileReader(); reader.name = this.files[0].name; reader.type = this.files[0].type; console.dir(reader); reader.refid = "image"; // FileReader に画像が読み込まれた時のイベント $(reader).on("load", function () { if ( this.type.indexOf("image/") == 0 ) { $("<img>").appendTo("#extend") .prop( {"src": this.result, "title": this.name, "id": this.refid } ) // title にはオリジナルファイル名 .css( {"width": "100px", "margin": "10px" } ); } else { $("<div>").appendTo("#extend") .html( this.name + "<br>" + this.type ); } }); // 上記イベントを発動するための処理( this.files[i] は blob ) if (this.files[0]) { reader.readAsDataURL(this.files[0]); } }); }); </script> </head> <body> <div id="head"> <form id="frm"> <div> <input id="target" type="file" class="ml-4 btn btn-outline-primary"> <input type="submit" name="send" value="アップロード" class="ml-4 btn btn-outline-primary"> <a class="ml-4 btn btn-info" href="/php/upload/php-upload-basic.php">GET 再読み込み</a> </div> </form> </div> <div id="extend"> </div> </body> </html>
|
【jQueryの最新記事】
- clipboard.js で、2種類のクリップボード処理オブジェクトを作成して使い分ける
- jQuery の $.ajax で JSON 文字列を WEB より取得して TABLE を作成する
- jQuery で DIV の中の DIV を縦横中央に配置する
- jQuery で ページ内の画像のリンク切れを探してテーブルに URL を表示する
- クリックした入力フィールド以外をブラックアウトする jQuery プラグイン
- FORM の内容を localStorage に保存する jQuery プラグイン
- tableMagic : 単純に JSON から TABLE、TR、TH、TR、TD を作成する jQuery のプラグイン
- 滑らかなスクロール(scroll bar)を提供する jQuery プラグイン jQuery.NiceScroll
- jQuery : F1 キーでヘルプを起動させないようにする
- jQuery プラグイン jquery.balloon.js に jQuery UI を追加してバルーン毎に違ったアニメーション効果を設定する
- jquery.balloon.js で、balloon をメッセージ表示に使う( ゲーム等で使う為 )
- jQuery プラグイン jquery.balloon.js で複数バルーンにそれぞれ別のコンテンツを設定する為には、.each を使う
- jQuery プラグイン jquery.balloon.js を使用する『画像バルーン』の処理 (Excel で作成した吹き出し)
- jQuery プラグイン jquery.balloon.js の外部からのコントロール
- NAVER : Image*After の城と教会編
- 親(parent) フレームに jQuery が無い場合に jQuery をインストールする。
- jQuery で書かれた、幻想的な動く星座のようなシーン
- jQuery の addClass で、CSS で作成するサイフの出来上がる過程を見れるようにしました
- jQuery/JavaScript でフルスクリーンAPI( スクロールしないし、こりゃあ、WebGL の為にあるような・・・ )
- CSS transition : jQuery の addClass と removeClass で変化を付ければいい。いや、これが一番よさそうだ。