input上传图片并预览

摘要:
首先说一下input大家都知道上传文件,图片是通过input的file进行上传的。效果图如下代码:Chooseafile其中隐藏input原始样式的办法有几种我就随便写几个仅做参考。也就是类.inputfile的css内容.inputfile{opacity:0;}或者.inputfile{position:absolute;clip:rect;}也可以.inputfile{z-index:-11111;width:0px;height:1px;}总之有很多办法,只是给大家一个思路。

首先说一下input

大家都知道上传文件,图片是通过input 的file进行上传的。

1. 首先是样式

大家都知道input在HTML的代码为 <input type="file">;在页面的样式是不可以更改的,如下图
这里写图片描述
但是最为一个投机取巧的前端,一切样式都是可以修改的。
效果图如下
这里写图片描述
代码:
<input type="file" name="file" />
<label for="file" class='btn btn-success'>Choose a file</label>

其中隐藏input原始样式的办法有几种我就随便写几个仅做参考。也就是类.inputfile的css内容

.inputfile {
            opacity:0;
        }

或者

.inputfile {
           position:absolute;clip:rect(0 0 0 0);
        }

也可以

.inputfile {
            z-index:-11111;  width:0px;  height:1px;
        }
总之有很多办法,只是给大家一个思路。

2. input的file类型控制

input的标签有一个accept属性,accept 属性只能与 <input type="file"> 配合使用。它规定能够通过文件上传进行提交的文件类型。
因为我们需要做的是上传图片所以这里我们是<input type="file" accept="image/*">;效果图如下
这里写图片描述
但是在Chrome浏览器下,可能会有文件选择窗口打开非常慢点(大约慢5秒左右呢)问题,因此,如果仅仅是上传图片,建议使用:<input type="file" accept="image/png, image/jpeg, image/gif, image/jpg">
当然accept还有一些其他的值,如

        <input type="file" webkitdirectory directory multiple/>
        <label for="file">上传文件夹</label>
        <br>
        <input type="file" accept="application/pdf"/>
        <label for="file">上传pdf文件</label>
        <br>
        <input type="file" accept="audio/x-mpeg"/>
        <label for="file">上传mp3文件</label>
        <br>
        <input type="file" accept="text/html"/>
        <label for="file">上传html文件</label>

多个属性值使用逗号分隔<input accept="audio/*,video/*,image/*">

3. 在form中的使用

如果想使用浏览器原生特性实现文件上传(如图片)效果,父级的form元素有个东西不能丢,就是:enctype="multipart/form-data" enctype属性规定在发送到服务器之前应该如何对表单数据进行编码,默认的编码是:”application/x-www-form-urlencoded“。对于普通数据是挺适用的,但是,对于文件什么的,就不能乱编码了,该什么就是什么,只能使用multipart/form-data作为enctype属性值。

4. 图片预览

简单的来说就是,就是替换img的src;而读取URL有filereader 和 URL.createObjectURL 两种预览方式。这两种方式可以获得上传图片的名字(name)


filereader 的方法:

//filereader 的方法
<form action="" enctype="multipart/form-data">
    <input id="file" class="filepath" onchange="changepic(this)" type="file"><br>
    <img src="" id="show" width="200">
</form>
<script>function changepic() {
        var reads= new FileReader();
        f=document.getElementById('file').files[0];
        reads.readAsDataURL(f);
        reads.onload=function (e) {
            document.getElementById('show').src=this.result;
        };
    }
</script>

createObjectURL的方法

//createObjectURL的方法
<form action="" enctype="multipart/form-data">
    <input id="file" class="filepath" onchange="changepic(this)" type="file"><br>
    <img src="" id="show" width="200">
</form>
<script>function changepic(obj) {
        //console.log(obj.files[0]);//这里可以获取上传文件的name
        var newsrc=getObjectURL(obj.files[0]);
        document.getElementById('show').src=newsrc;
    }
    //建立一個可存取到該file的url
    function getObjectURL(file) {
        var url = null ;
        // 下面函数执行的效果是一样的,只是需要针对不同的浏览器执行不同的 js 函数而已
        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 ;
    }
</script>

以上是两种方法,按照前辈们的说法,creatObjectURL可以有更好的性能,或许是浏览器自带接口的原因, 可以处理的更快。
基于上述的了解的方法,自己做了一个demo;效果图如下,
这里写图片描述
预览图如下:
这里写图片描述
因为文件太大;详细资源代码请到图片上传预览下载;如急需的请留言。


原文地址:https://blog.csdn.net/weixin_38023551/article/details/78318532

免责声明:文章转载自《input上传图片并预览》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Vue前端实现登陆功能Oracle常用监控sql语句下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle加密解密

Oracle内部有专门的加密包,可以很方便的对内部数据进行加密(encrypt)和解密(decrypt).   介绍加密包之前,先简单说一下Oracle基本数据类型——RAW类型。   RAW,用于保存位串的数据类型,类似于CHAR,声明方式RAW(L),L为长度,以字节为单位,作为数据库列最大2000,作为变量最大32767字节。      操作RAW类...

URL中的保留和不安全字符

书写URL时要使用US-ASCII字符集可以显示的字符。 http://www.google.com 如果需要在URL中使用不属于此字符集的字符,就要使用特殊的符号对该字符进行编码。 如:最常使用的空格用%20来表示,例如:http://www.google.com/new%20123.html 除了那些无法显示的字符外,还需要在URL中对那些保留(res...

uni-app 知识点

---【uni-app】:   是一个使用vue。js开发所有前端应用的框架,开发者编写一套代码,可发布到ios,android,H5,以及各种小程序,   (微信/支付宝/百度/头条/QQ/钉钉)等多个平台 ---【环境搭建】:   1,安装APP开发版HBuilderX   2,安装微信开发者工具 ---【使用HBuilderX初始化项目】:   1,...

input chrome下输入之后背景变为黄色的解决办法

之所以Input输入之后背景原因色变为可恶的黄色,是因为在chrome 下input加上了input:-webkit-autofill这个属性,里面写的就是这个问题出现的原因 代码就是:input:-wenkit-autofill:{background-color:黄色的;etc},解决办法有两个: 第一个解决办法就是:将你的input输入框中加入aut...

pl/sql中的取模运算

pl/sql语言的取模(即求余)运算不使用大部分语言所支持的 a%b 而是使用函数 mod(a,b) 例子如下:写一个匿名块判断某年是否是闰年,能被4但是不能被100整除,或者能被400整除 1 declare 2 judge varchar2(200); 3 year_input number; 4 begin 5 year_inp...

sql 简单查询修改

1.group by order by select siteid count(*)as 1 from webdb where gathtrime between '2017-06-14 00:00:00' and '2017-06-14 23:59:59'group by siteid order by 1desc 2 inlimit sel...