input file相关知识简例

在此介绍的input file相关知识为: 上传照片及文件,其中包括单次上传、批量上传、删除照片、增加照片、读取图片、对上传的图片或文件的判断,比如限制图片的张数、限制图片的格式、大小等。

在开发中,文件上传必不可少,<input type="file" /> 是常用的上传标签,但特别low、浏览的字样又不能换,但难不倒强迫症患者...看一些其他网站有的将<input type="file" />隐藏,用点击其他的标签(图片等)来时实现选择文件上传功能,也有的将其设为透明,这里推荐后者,详情请参考下面代码。

此为本人写的demo,更人性化的效果实现,供分享,不足之处望提议,将不胜感激

 <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.kuang{
display: inline-block;
vertical-align: middle;
box-shadow: inset 0px 1px 20px 5px #ddd;
text-align: left;
margin-right: 20px;
margin-bottom: 20px;
width: 165px;
height: 165px;
}
.addhao{
width: 165px;
height: 165px;
background: url(../img/add_photo_plus.png);
}
.on{
display: inline-block;
text-align: left;
margin-right: 20px;
margin-bottom: 20px;
width: 165px;
height: 165px;
display: none;
position: relative;
overflow: hidden;
line-height: 200px;
}
.xian{
width: 165px;
height: 165px;
position: absolute;
background-image: linear-gradient(
0deg,
rgba(0,0,0,0.7) 50%,
transparent 50%
);
background-size: 165px 4px;
display: none;
z-index: 2;
}
.chahao{
position: absolute;
width: 60px;
height: 60px;
background: url(../img/ico_02.png);
background-position: -171px -158px;
top: 52.5px;
left: 52.5px;
display: none;
z-index: 2;
}
.on img{
width: 100%;
height: auto;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin:auto;
}
.kuang input{
width: 164px;
height: 164px;
opacity: 0;
}
.button{
width: 500px;
height: 36px;
margin: 0 auto; }
.button .set{
float: left;
width: 216px;
height: 36px;
background: #ddd;
text-align: center;
position: relative;
}
.set input{
width: 216px;
height: 36px;
opacity: 0;
position: absolute;
top: 0;
left: 0;
}
.button .next{
float: right;
width: 216px;
height: 36px;
background: red;
color: white;
}
.bigk{
width: 1000px;
margin: 0 auto;
text-align: center;
}
</style>
<script src="branches/jquery-3.1.1.min.js"></script>
</head>
<body>
<div class="bigk">
<div class="kuang">
<div class="addhao">
<input type="file" name="" class="fileinput">
</div>
<div class="on">
<div class="xian"></div>
<div class="chahao"></div>
</div>
</div>
<div class="kuang">
<div class="addhao">
<input type="file" name="" class="fileinput">
</div>
<div class="on">
<div class="xian"></div>
<div class="chahao"></div>
</div>
</div>
<div class="kuang">
<div class="addhao">
<input type="file" name="" class="fileinput">
</div>
<div class="on">
<div class="xian"></div>
<div class="chahao"></div>
</div>
</div>
<h3>上传n张照片,生成属于你的相册</h3>
<p><span style="color:red;">限制条件:可自行增减设置;</span>如:支持jpg/png/jpeg格式,单张照片不大于20M,单次上传不多于n张,请尽量上传横板照片</p>
<img src="../img/line_03.png" alt="">
<div class="button" >
<a href=""><div class="set">批量上传<input type="file" name="" multiple="multiple" id="piliang"></div></a>
<a href="#" class="next">限制张数</a>
</div>
</div>
</div>
</div>
<script>
// 单张上传照片 删除照片
$(" .fileinput").change(function () {
var file = this.files[0];
readFile(file,$(this).parent().siblings(".on"));
});
$(".on").mouseover(function () {
$(this).children(".xian").show();
$(this).children(".chahao").show(); });
$(".on").mouseleave(function () {
$(this).children(".xian").hide();
$(this).children(".chahao").hide();
});
$(".chahao").click(function () {
$(this).next().remove();
$(".xian").hide();
$(".chahao").hide();
$(this).parent().hide();
$(this).parent().siblings(".addhao").show();
$(this).parent().siblings(".addhao").children().val(""); });
var on =document.querySelector(".on");
// 需要把阅读的文件传进来file element是把读取到的内容放入的容器
function readFile(file,element) {
// 新建阅读器
var reader = new FileReader();
// 根据文件类型选择阅读方式
switch (file.type){
case 'image/jpg':
case 'image/png':
case 'image/jpeg':
case 'image/gif':
reader.readAsDataURL(file);
break;
}
// 当文件阅读结束后执行的方法
reader.addEventListener('load',function () {
// 如果说让读取的文件显示的话 还是需要通过文件的类型创建不同的标签
switch (file.type){
case 'image/jpg':
case 'image/png':
case 'image/jpeg':
case 'image/gif':
var img = document.createElement('img');
img.src = reader.result;
element.append(img);
element.siblings(".addhao").hide();
element.show();
break;
}
});
}
// 批量上传部分
var piliang = document.querySelector('#piliang');
var on = $(".on");
piliang.addEventListener('change',function () {
for (var i = 0;i < this.files.length;i++){
var file = this.files[i];
on.eq(i).children(".chahao").next().remove();
readFile(file,on.eq(i));
}
});
//
var on = $(".on");
$(".next").click(function () {
for (var i = 0; i < 10; i++) {
console.log(on[i].childNodes.length);
if (on[i].childNodes.length==6){
//这个判断就是说明里面有多少个孩子,孩子不够数,不会生成相册
}else{
alert("上传照片不足3张");
$(".next").attr("href","javascript:void(0)");
return
}
$(".next").attr("href","生成相册.html");
}
});
</script>
</body>
</html>

初始效果图如下

点击+号进行添加图片效果图如下

 点击+号添加完成单次上传图片效果图如下

点击批量进行上传效果图如下:

删除上传照片效果图如下

当没有满足js中的设置要求,将不能提交

解析:

选择文件:input:file 选择本地文件,默认为单选,多选为multiple;

读取文件:需要阅读器 新建reader;

有关js这里用的是jq,在用此方法前,请将jq链接到页面;

HTML中上传与读取图片或文件(input file)----在路上(25)的更多相关文章

  1. ASP.NET中上传并读取Excel文件数据

    在CSDN中,经常有人问如何打开Excel数据库文件.本文通过一个简单的例子,实现读取Excel数据文件. 首先,创建一个Web应用程序项目,在Web页中添加一个DataGrid控件.一个文件控件和一 ...

  2. 前端上传视频、图片、文件等大文件 组件Plupload使用指南

    demo:https://blog.csdn.net/qq_30100043/article/details/78491993 Plupload上传插件中文帮助文档网址:http://www.phpi ...

  3. jquery即时获取上传文件input file文件名

    截图:   代码: <input type="file" id="choosefile" style="display:none"/& ...

  4. 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求

    <script type="text/jscript"> $(function () { $("#btn_uploadimg").click(fun ...

  5. 上传文件 input file

    //-----前端文件------- form id="uploadForm" enctype="multipart/form-data"> <in ...

  6. Servlet+Jsp实现图片或文件的上传功能

    首先,我们创建一个新的web工程,在工程的WebRoot目录下新建一个upload文件夹,这样当我们将该工程部署到服务器上时,服务器便也生成个upload文件夹,用来存放上传的资源. 然后,在WebR ...

  7. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  8. Android文件(File)操作

    Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...

  9. 【转】Android必备知识点- Android文件(File)操作

    Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...

随机推荐

  1. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  2. WPF 微信 MVVM 【续】发送部分QQ表情

    今天主要记录的就是发送QQ表情, WPF 微信 MVVM里写了,后期为了发送QQ表情,需要把TextBox替换为RichTextBox,接下来就说说替换的过程. 一.支持Binding的RichTex ...

  3. MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  4. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

  5. C++内联函数

    在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么在C++中有没有相同的技术或者更好的实现方法呢?答案是有的,那就是内联函数.内联函数作为编译器优化手段的一种技术,在降低 ...

  6. Effective前端2:优化html标签

    div { float: left; } .keyboard > div + div { margin-left: 8px; } --> div{display:table-cell;ve ...

  7. Java之多态(二)

    package test05;import test06.Car1;public class DuoTai_Test02 { /**多个对象,一个形态 * Tiger.Lion.Snake → Ani ...

  8. SAP CRM 将组件整合至导航栏中

    到现在,我们已经可以让组件独立地显示.我们只是运行它.让它显示在Web UI中.让我们把组件整合进导航栏,使我们可以在正常登录Web UI时访问它. 步骤一: 为你的UI组件主窗体创建一个内向插件. ...

  9. Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)

    昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用Li ...

  10. 图解Spark API

    初识spark,需要对其API有熟悉的了解才能方便开发上层应用.本文用图形的方式直观表达相关API的工作特点,并提供了解新的API接口使用的方法.例子代码全部使用python实现. 1. 数据源准备 ...