HTML点击上传本地图片到页面 并在页面上显示上传的图片 以及遇到的问题

在这里插入图片描述

<div class="col-md-5">
	<img id="img-avatar" src="../images/index/user.jpg" class="img-responsive" alt="无法显示默认头像" />
</div>

<div class="col-md-offset-2 col-md-4">
	<input id="chooseImage" type="file" name="file" accept="image/*">
</div>

点击并上传图片在本地显示的JS代码

$("#chooseImage").on('change',function(){
	let filePath = $(this).val(); //获取到input的value,里面是文件的路径
	let fileFormat = filePath.substring(filePath.lastIndexOf(".")).toLowerCase(); //获取文件后缀

	let src = window.URL.createObjectURL(this.files[0]); //转成可以在本地预览的格式

	// 检查是否是图片
	if( !fileFormat.match(/.png|.jpg|.jpeg|.bmp|.gif/) ) {
		//error_prompt_alert
		alert('上传错误,文件格式必须为:png/jpg/jpeg/bmp/gif');
		return ;
	}
	$('#img-avatar').attr('src', src); //将图片地址放置在img的src中。
});

尽管我们通过accept属性让用户在文件选择器只允许选择accept值指定的文件类型。但accept属性不验证所选文件的类型;它只是为浏览器提供提示来引导用户选择正确的文件类型。用户仍然可以(在大多数情况下)在文件选择器中切换一个选项,使其能够覆盖此选项并选择他们希望的任何文件,然后选择不正确的文件类型。

对于这个问题,我们通过JS代码做出进一步的连接,但是这里还是存在一个问题,就是用户选择不正确的文件类型之后,显示出来的是
在这里插入图片描述
接下来我通过val()改变 类型为"file"的input的value值,但是浏览器爆出如下错误。


Jquery 报错 Uncaught InvalidStateError: Failed to set the ‘value’ property on ‘HTMLInputElement’:

如果出现这个错误,可能是因为:

JS设置了file input的value。

“出于安全限制,file 的value 是只读的,只能由用户选择或手动输入,不允许由程序代码设置。”

这个错误会导致之后的JS部分代码 不会执行。


解决办法

$("#chooseImage").on('change',function(){
	let filePath = $(this).val(); //获取到input的value,里面是文件的路径
	let fileFormat = filePath.substring(filePath.lastIndexOf(".")).toLowerCase(); //获取文件后缀

	let src = window.URL.createObjectURL(this.files[0]); //转成可以在本地预览的格式

	// 检查是否是图片
	if( !fileFormat.match(/.png|.jpg|.jpeg|.bmp|.gif/) ) {
		//error_prompt_alert
		alert('上传错误,文件格式必须为:png/jpg/jpeg/bmp/gif');
		this.value = ""; //真的傻逼,val()和value这两个有啥区别?
		return ;
	}
	$('#img-avatar').attr('src', src); //将图片地址放置在img的src中。
});
  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值