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 で変化を付ければいい。いや、これが一番よさそうだ。




























