首先说一下input

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

1. 首先是样式

大家都知道input在HTML的代码为 <input type="file">;在页面的样式是不可以更改的,如下图



但是最为一个投机取巧的前端,一切样式都是可以修改的。

效果图如下



代码:

<input type="file" name="file" id="file" class="inputfile" />

<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上传图片并预览的更多相关文章

  1. input上传图片 显示预览信息

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  2. input 上传图片显示预览、调用摄像头,ios和Android的兼容性解决

    html代码: <img id="pic" src="img/pic.png"/> </span><input id=" ...

  3. vue 利用原声input上传图片并预览并删除

    <template> <div class="com-upload-img"> <div class="img_group"> ...

  4. vue <input type="file">上传图片、预览、删除

    使用原生<input type="file">上传图片.预览.删除:multiple实现可上传多张 参数名 类型 说明 fileTypes Array 文件类型, 默认 ...

  5. js上传图片及预览功能

    详细内容请点击 参考了网上一些人代码写了一个上传图片及时预览的功能 <img id="imgTag" style="height: 100px;" alt ...

  6. jquery解决file上传图片+图片预览

    js解决file上传图片+图片预览 demo案例中代码为js原生控制,可以根据项目的需求修改为jquery操作 <!DOCTYPE html><html lang="en& ...

  7. js实现上传图片本地预览功能以及限制图片的文件大小和尺寸大小

    方法一: js: /**     * 上传图片本地预览方法     * @param {Object} fileObj 上传文件file的id元素  fresh-fileToUpload      * ...

  8. 上传图片预览JS脚本 Input file图片预览的实现示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 一段上传图片预览JS脚本,Input file图片预览的实现

    在深圳做项目的时候,需要一个用户上传头像预览的功能!是在网上找了好多,都不太满意.要么是flash的,要么是Ajax上传后返回图片路径的,要么压根就是不能用的.幸运的是在这个项目以前有人写过一个图片预 ...

随机推荐

  1. hive如何配置支持事务及insert、update、delete

    Hive从0.14版本开始支持事务和行级更新,但缺省是不支持的,需要一些附加的配置.要想支持行级insert.update.delete,需要配置Hive支持事务. 一.Hive具有ACID语义事务的 ...

  2. LintCode刷题笔记-- InterLeaving

    标签: 动态规划 解题思路 1. 这道题最重要的是,存在三个字符串,但是并不需要两个二维矩阵来进行解,因为可以使用i+j-1来代表s3的下标,这样就可以通过i和j来遍历s3了.因为对于任何一个合法的交 ...

  3. ecshop二次开发之电子票

    前台效果展示: 2. 3. 后台展示效果: 代码实现: 一.             添加菜单项:路径admin\includes\inc_menu.PHP $modules['18_ticket_m ...

  4. Python多线程在爬虫中的应用

    题记:作为测试工程师经常需要解决测试数据来源的问题,解决思路无非是三种:(1)直接从生产环境拷贝真实数据 (2)从互联网上爬取数据 (3)自己用脚本或者工具造数据.前段时间,为了获取更多的测试数据,笔 ...

  5. Codeforces Round #192 (Div. 2) A. Cakeminator【二维字符数组/吃掉cake,并且是一行或者一列下去,但是该行/列必须没有草莓的存在】

    A. Cakeminator time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  6. MySQL学习-- UNION与UNION ALL

    UNION用于把来自许多SELECT语句的结果组合到一个结果集合中,也叫联合查询. ? 1 2 3 4 5 SELECT ... UNION [ALL | DISTINCT] SELECT ... [ ...

  7. 第二周<导学/分类>

    分类学习 分类算法各有不同 knn naivebyes regression dnn sklearn.linear_modlel 线性函数 sklearn.preprocessing 非线性函数 分类 ...

  8. Hdu 4497

    题目链接 已知 gcd(x, y, z) = G, lcm(x, y, z) = L, 求有多少种组合(x, y, z)可以满足条件.G, L都在32位int范围内. 思路: 素数分解 + 容斥 L ...

  9. leaflet的入门开发

    2016年9月27日—1.0leaflet,最快的,最稳定和严谨的leaflet,终于出来了! leaflet是领先的开源JavaScript库为移动设备设计的互动地图.重33 KB的JS,所有映射大 ...

  10. thinkphp5.0 验证提示信息的类型

    以上是5.0.12版本 下面是5.0.5版本,没有elseif 上图中红方格的值只能是string类型,但是这种情况是在5.0.5版本是可以设置为array类型的