设置显示input上传的图片

1、createObjectURL
createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。

2、FileReader方法
FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。

createObjectURL demo:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>createObjectURL显示上传的图片</title>
<style>
body{ display:flex; line-height:30px;}
.left , .right{ width:50%; padding-left:10px; box-sizing:border-box;}
.left{ min-height:600px; border-right:#f00 dashed 1px;}
input{ display:block; border:#000 solid 1px;}
</style>
</head>

<body>

<div class="left">
	<div><strong>原生JS</strong></div>
    单选
    <input id="oneJs" type="file" accept="image/*" />
    <div id="showOneJs" style="min-height:200px;"></div>
    
    可多选
    <input id="twoJs" type="file" accept="image/*" multiple />
    <div id="showTwoJs"></div>
</div>

<div class="right">
	<div><strong>JQ</strong></div>
    单选
    <input id="oneJq" type="file" accept="image/*" />
    <div id="showOneJq" style="min-height:200px;"></div>
    
    可多选
    <input id="twoJq" type="file" accept="image/*" multiple />
    <div id="showTwoJq"></div>
</div>

<script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
function getObjectURL(file){
	//console.log(file);
    var url = null;
    if(window.createObjectURL!=undefined){ // basic
        url = window.createObjectURL(file);
    }else if(window.URL!=undefined){ // mozilla(firefox)
        url = window.URL.createObjectURL(file);    
    }else if(window.webkitURL!=undefined){ // webkit or chrome
        url = window.webkitURL.createObjectURL(file);
    }
    return url;
}


/****************/


//jq 调用方法

$('#oneJq').on('change',function(){
	$('#showOneJq').empty().append('<img style="max-width:200px; max-height:200px;" src="' + getObjectURL(this.files[0]) + '" />');
});

$('#twoJq').on('change',function(){
	var This = this;
	$('#showTwoJq').empty();
	for(var i = 0; i < This.files.length ; i ++){
		$('#showTwoJq').append('<img style="max-width:200px; max-height:200px;" src="' + getObjectURL(This.files[i]) + '" />');
	}
});


/****************/


//原生JS调用方法

//添加图片元素
function createImg(imgEle , file , parEle){
	imgEle.setAttribute('style','max-width:200px;max-height:200px;');
	imgEle.setAttribute('src',getObjectURL(file));
	document.getElementById(parEle).appendChild(imgEle);
}
document.getElementById('oneJs').addEventListener( 'change' , function(e){
	var img = document.createElement('img');
	document.getElementById('showOneJs').innerHTML = '';
	createImg(img , e.target.files[0] , 'showOneJs');	
} , false );

document.getElementById('twoJs').addEventListener( 'change' , function(e){
	var img = [];
	document.getElementById('showTwoJs').innerHTML = '';
	for(var i = 0; i < e.target.files.length ; i ++){
		img[i] = document.createElement('img');
		createImg(img[i] , e.target.files[i] , 'showTwoJs');
	}
} , false );


</script>
</body>
</html>

FileReader demo:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>fileReaderURL显示上传的图片</title>
<style>
body{ display:flex; line-height:30px;}
.left , .right{ width:50%; padding-left:10px; box-sizing:border-box;}
.left{ min-height:600px; border-right:#f00 dashed 1px;}
input{ display:block; border:#000 solid 1px;}
</style>
</head>

<body>

<div class="left">
	<div><strong>原生JS</strong></div>
    单选
    <input id="oneJs" type="file" accept="image/*" />
    <div id="showOneJs" style="min-height:200px;"></div>
    
    可多选
    <input id="twoJs" type="file" accept="image/*" multiple />
    <div id="showTwoJs"></div>
</div>

<div class="right">
	<div><strong>JQ</strong></div>
    单选
    <input id="oneJq" type="file" accept="image/*" />
    <div id="showOneJq" style="min-height:200px;"></div>
    
    可多选
    <input id="twoJq" type="file" accept="image/*" multiple />
    <div id="showTwoJq"></div>
</div>

<script type="text/javascript" src="https://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
function getfileReaderURL(file,callback){
	//console.log(file);
    var url = null;
	var reader = new FileReader();
	//console.log(reader);
	
	reader.readAsDataURL(file); //将文件以Data URL形式读入页面
	//reader.readAsBinaryString(file); //将文件以二进制形式读入页面
	//reader.readAsText(file); //将文件以文本形式读入页面
	
    reader.onload=function(e){ //文件读取成功完成时触发
        url = reader.result;
		//console.log(url);
		callback(url);
    } 
    reader.onloadend=function(e){ //读取完成触发,无论成功或失败
    } 
}


/****************/


//jq 调用方法

$('#oneJq').on('change',function(){
	getfileReaderURL(this.files[0],function(url){
		$('#showOneJq').empty().append('<img style="max-width:200px; max-height:200px;" src="' + url + '" />');
	});
});

$('#twoJq').on('change',function(){
	var This = this;
	$('#showTwoJq').empty();
	for(var i = 0; i < This.files.length ; i ++){
		getfileReaderURL(This.files[i],function(url){
			$('#showTwoJq').append('<img style="max-width:200px; max-height:200px;" src="' + url + '" />');
		});
	}
});


/****************/


//原生JS调用方法

//添加图片元素
function createImg(imgEle , file , parEle){
	imgEle.setAttribute('style','max-width:200px;max-height:200px;');
	getfileReaderURL(file,function(url){
		imgEle.setAttribute('src',url);
		document.getElementById(parEle).appendChild(imgEle);
	});
}
document.getElementById('oneJs').addEventListener( 'change' , function(e){
	var img = document.createElement('img');
	document.getElementById('showOneJs').innerHTML = '';
	createImg(img , e.target.files[0] , 'showOneJs');	
} , false );

document.getElementById('twoJs').addEventListener( 'change' , function(e){
	var img = [];
	document.getElementById('showTwoJs').innerHTML = '';
	for(var i = 0; i < e.target.files.length ; i ++){
		img[i] = document.createElement('img');
		createImg(img[i] , e.target.files[i] , 'showTwoJs');
	}
} , false );


</script>
</body>
</html>

createObjectURL && FileReader vue.js demo:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>fileReaderURL显示上传的图片</title>
<style>
[v-cloak]{ display: none;}
body{ display:flex; line-height: 1.6;}
.left , .right{ width:50%; padding-left:10px; box-sizing:border-box;}
.left{ min-height:600px; border-right:#f00 dashed 1px;}
input{ display:block; border:#000 solid 1px;}
.show_img{ min-height: 200px; padding: 10px 0;}
.show_img img{ display: inline-block; width: 100px; height: 200px; margin: 0 5px; object-fit: contain; border: #eee solid 1px;}
</style>
</head>

<body>

<!-- createObjectURL -->
<div id="app-createobjecturl" v-cloak class="left">
	<div style="color: red;">-----createObjectURL-----</div>
	<div>单选</div>
	<input ref="referenceUpload" @change="sendImg" type="file" accept="image/*" />
	<div class="show_img">
		<img v-if="img" :src="img" >
	</div>
	
	
	<div>可多选</div>
	<input ref="referenceUploadMore" @change="sendImgMore" type="file" accept="image/*" multiple />
	<div class="show_img">
		<img v-if="imgArr.length" v-for="item in imgArr" :src="item" >
	</div>
</div>

<!-- FileReader -->
<div id="app-filereader" v-cloak class="right">
	<div style="color: red;">-----FileReader-----</div>
	<div>单选</div>
	<input ref="referenceUpload" @change="sendImg" type="file" accept="image/*" />
	<div class="show_img">
		<img v-if="img" :src="img" >
	</div>


	<div>可多选</div>
	<input ref="referenceUploadMore" @change="sendImgMore" type="file" accept="image/*" multiple />
	<div class="show_img">
		<img v-if="imgArr.length" v-for="item in imgArr" :src="item" >
	</div>
</div>

<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script type="text/javascript">
// createObjectURL
function getObjectURL(file, callback) {
	//console.log(file);
	var url = null;
	if (window.createObjectURL != undefined) { // basic
		url = window.createObjectURL(file);
	} else if (window.URL != undefined) { // mozilla(firefox)
		url = window.URL.createObjectURL(file);
	} else if (window.webkitURL != undefined) { // webkit or chrome
		url = window.webkitURL.createObjectURL(file);
	}
	callback(url);
}

var VMC = new Vue({
	el:"#app-createobjecturl",
	data:{
		img:'',
		imgArr:[],
	},
	created() {
		
	},
	mounted() {
		
	},
	watch() {
		
	},
	methods:{
		// 上传图片-单张
		sendImg(e){
			// console.log(e.target.files[0]);
			if(e.target.files[0]){
				if(e.target.files[0].size / 1024 / 1024 > 3){
					this.$refs.referenceUpload.value = null;
					alert('请上传不超过3M的图片');
					return;
				}
				// 获取base64格式图片中...
				getObjectURL(e.target.files[0],(url)=>{
					this.$refs.referenceUpload.value = null;
					this.img = url;
					console.log(this.img);
				});
			}
		},
		
		// 上传图片-多张
		sendImgMore(e){
			// console.log(e.target.files[0]);
			if(e.target.files[0]){
				this.imgArr = [];
				let maxSizeTips = []
				for(var i = 0; i < e.target.files.length ; i ++){
					if(e.target.files[i].size / 1024 / 1024 > 3){
						maxSizeTips.push(i+1);
					}else{
						// 获取base64格式图片中...
						getObjectURL(e.target.files[i],(url)=>{
							this.imgArr.push(url);
							console.log(this.imgArr);
						});
					}
					if(i == e.target.files.length - 1){
						this.showTips(maxSizeTips);
						this.$refs.referenceUploadMore.value = null;
					}
				}
			}
		},
		// 多张图片上传后,文件大了一次提示
		showTips(maxSizeTips){
			if(maxSizeTips.length){
				alert('第' + maxSizeTips.join('、') + '张图片超过3M');
			}
		}
		
	}
})

/****************/

// FileReader
function getfileReaderURL(file,callback){
	//console.log(file);
	var url = null;
	var reader = new FileReader();
	//console.log(reader);

	reader.readAsDataURL(file); //将文件以Data URL形式读入页面
	//reader.readAsBinaryString(file); //将文件以二进制形式读入页面
	//reader.readAsText(file); //将文件以文本形式读入页面

	reader.onload=function(e){ //文件读取成功完成时触发
		url = reader.result;
		//console.log(url);
		callback(url);
	} 
	reader.onloadend=function(e){ //读取完成触发,无论成功或失败
	} 
}

var VMF = new Vue({
	el:"#app-filereader",
	data:{
		img:'',
		imgArr:[],
	},
	created() {
		
	},
	mounted() {
		
	},
	watch() {
		
	},
	methods:{
		// 上传图片-单张
		sendImg(e){
			// console.log(e.target.files[0]);
			if(e.target.files[0]){
				if(e.target.files[0].size / 1024 / 1024 > 3){
					this.$refs.referenceUpload.value = null;
					alert('请上传不超过3M的图片');
					return;
				}
				// 获取base64格式图片中...
				getfileReaderURL(e.target.files[0],(url)=>{
					this.$refs.referenceUpload.value = null;
					this.img = url;
					console.log(this.img);
				});
			}
		},
		
		// 上传图片-多张
		sendImgMore(e){
			// console.log(e.target.files[0]);
			if(e.target.files[0]){
				this.imgArr = [];
				let maxSizeTips = []
				for(var i = 0; i < e.target.files.length ; i ++){
					if(e.target.files[i].size / 1024 / 1024 > 3){
						maxSizeTips.push(i+1);
					}else{
						// 获取base64格式图片中...
						getfileReaderURL(e.target.files[i],(url)=>{
							this.imgArr.push(url);
							console.log(this.imgArr);
						});
					}
					if(i == e.target.files.length - 1){
						this.showTips(maxSizeTips);
						this.$refs.referenceUploadMore.value = null;
					}
				}
			}
		},
		// 多张图片上传后,文件大了一次提示
		showTips(maxSizeTips){
			if(maxSizeTips.length){
				alert('第' + maxSizeTips.join('、') + '张图片超过3M');
			}
		}
		
	}
})

</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值