画像をプレビューしてアップロードする:jquery備忘録

Posted by yonezo in 仕事 | Leave a comment
Pocket

画像をスケジュールに載せたいなぁと思ったので、実装した。
最初はさっぱりやり方がわからなかったが、根性ですね。

大まかな仕様は

  • inputのtype=”file”を設置して、ファイルを選択したらsubmitせずにプレビューする
  • アップロードできるファイルは拡張子がjpg、gif、pngだけ

ざっとこれだけ。
これだけなんだが、ざっと5時間ほどもかかったぞ!(悔

まず拡張子のチェックだが、これは簡単。
選択されたファイル名をチェック。

inputのchangeイベントで拾います。

	$('input[type=file]').change(function() {
		//	拡張子で判定
		var dir = $(this).val();
		ext = dir.split(".").reverse();
		ext_nm = ext[0];
		if(!ext_nm.match(/(jpg|gif|png)/i)){
			$(this).val("");
			$("div#input_alert").text("jpg,gif,pngのみアップロードできます").css("color","red").css("display","inline");
				$("#image_thumb").css("display","none");

			return false;
		}else{
			$("div#input_alert").css("display","none");
		}

ソースがイタいのは勘弁してください。
ファイル名を配列にぶったぎって、拡張子部分を正規表現でチェック。
で、違ったらアラートを出すと同時に入力されたパスをクリアしちゃうと。

アップロード部分はプラグインに頼りました。
http://lagoscript.org/jquery/upload

なんか一番シンプルそうだったのでこれにした。

まず、画像ファイルをアップしてサーバ側のphpでimagickを使ってサムネイルを生成する。
そうしたら、生成した画像ファイルのパスを返すという感じ。
返されたパスをimgタグにぶち込んでshowする。

ただ、そのままだと返ってくるまで動きもなく待たされるのでloading.gifを表示する。

		//	アップロード
		$("#image_thumb").html('').show();
		$(this).upload('uploader.php,function(res){
			//	画像のURLを取得して表示する
			var r = Math.floor(Math.random()*100000);
			$("#image_thumb").html('').show();
		}, 'html');

途中でランダムな数字を引数として渡しているのは、キャッシュ回避な苦肉の策です。
サーバ側の処理は$_FILEでいろいろやると。

あー疲れた。
さて、自転車の練習するかな。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です