JOURNAL クリエイティブとマーケティングの話

input[type=”file”]でアップロードした画像をプレビュー表示する方法

Webサービスのプロフィール編集画面などで、プロフィール画像をアップロードするとプレビュー表示される機能ってあると思いますが、それの実装方法のメモ。

HTML

<div id="icon_box">
	<div id="upload_img">
		<div class="img"></div>
	</div>
	<div id="upload_btn">
		<label>
			<input type="file" accept=".png, .jpg, .jpeg, .gif" onchange="uploadImage(this);"/>
		</label>
	</div>
</div>

今回はアップロードされた画像が #upload_img > .img の背景画像として表示されるようにします。

CSS

#icon_box {
	background: #eee;
	padding: 32px 24px 24px;
	border-radius: 8px;
	width: 100%;
	display: flex;
	flex-direction: column;
	align-items: center;
}

#upload_img {
	width: 120px;
	border-radius: 50%;
	overflow: hidden;
	border: 1px solid #fff;
	margin-bottom: 16px;
}

#upload_img > .img {
	display: block;
	position: relative;
	top: 0;
	left: 0;
	width: 100%;
	height: 0;
	padding-top: 100%;
	background: url(../images/avatar.png) no-repeat center center / cover;
}

#upload_img > .imgには画像が未アップロード状態のときに表示される画像を設定しておくとよいと思います。

JavaScript

function uploadImage(target) {
	let reader = new FileReader();
	reader.onload = function () {
		$upload_img = $("#upload_img > .img");
		img = new Image();
		img.src = this.result;
		$upload_img.css("background-image", "url(" + this.result + ")");
	}
	reader.readAsDataURL(target.files[0]);
}

1行目で、input[type=”file”]のonchange属性(uploadImage)を関数に設定します。

4行目にはアップロードした画像を背景として表示する要素を指定してください。