input实现图片或视频上传(样式+代码)
背景:vue/element.ui
1..html:
<div v-show="recordForm.resourceType==1">
<el-form-item>
<ul class="img-list">
<li v-for="(item,index) in recordForm.item">
<img :src=item.resourceUrl alt="" :key="index"/>
<span class="icon-btn">
<i class="el-icon-remove-outline del-btn" @click="delImg($event)" :data-src="item.resourceUrl"></i>
</span>
</li>
<li v-show="isLimit">
<span class="btnfile">
<input data-role="file" type="file" class="ufile" name="file"
id="uploadImgBtn" @change="upload" @click="clearValue($event)" :accept="accept">
<i data-role="upBtn" class="upload-btn el-icon-plus" enctype="multipart/form-data"></i>
</span>
</li>
</ul>
<p class="little-tip">单个图片上传大小限制:10M</p>
<p class="little-tip">图片数限制:1张至6张</p>
</el-form-item>
</div>
注意
- input标签的accept属性,设置上传图片的格式
input标签的multiple="multiple",设置可否多选
2.css:
.img-list {
padding: 0;
overflow: hidden;
li {
position: relative;
list-style: none;
float: left;
margin: 10px;
.del-btn {
position: absolute;
top: 0;
right: 0;
color: transparent;
}
img {
border-radius: 3px;
}
&:hover .del-btn {
color: #000;
}
}
}
.little-tip {
color: #c7c9d1;
}
.upload-video {
position: relative;
display: inline-block;
border: 1px solid #cacdd4;
padding: 0 15px;
border-radius: 3px;
background-color: #3f9dff;
color: #fff;
.videofile {
position: absolute;
width: 100%;
height: 100%;
right: 0;
top: 0;
opacity: 0;
}
}
3.upload.js
function upload(config) {
this.config = config;
}
upload.prototype.ajaxUp = function (fileId, callback) {
for (var i = 0; i < $('#' + fileId)[0].files.length; i++) {
var formData = new FormData();
formData.append('file_list', $('#' + fileId)[0].files[i].name);
ajax({
url: '验签url,如果不需要省略该ajax',
type: 'POST',
data: formData,
async: false,
dataType: 'json',
index: i,
success: function (data, cur_i) {
if (0 === data.code) {
var signs = data.data.signs;
var policy = signs.Policy;
var kss = signs.KSSAccessKeyId;
var key = signs.key;
var acl = signs.acl;
var signature = signs.Signature;
var name = signs.file_name;
var formDataUp = new FormData();
formDataUp.append('KSSAccessKeyId', kss);
formDataUp.append('acl', acl);
formDataUp.append('key', key);
formDataUp.append('Policy', policy);
formDataUp.append('Signature', signature);
formDataUp.append('file', $('#' + fileId)[0].files[cur_i]);
var fileObj = $('#' + fileId)[0].files[cur_i];
ajax({
url: '上传服务器url',
type: 'POST',
data: formDataUp,
async: false,
success: function () {
callback(key, name, fileObj);
window.console.log('upload class success');
},
error: function () {
window.console.log('与提交服务器通信发生错误');
}
});
}
},
error: function () {
window.console.log('与获取服务器通信发生错误');
}
});
}
};
4.js的使用
import Uploader from '@/libs/upload'
let uploader = new Uploader()
uploader.ajaxUp(containerId, (key, name, fileObj) => {
let host = '上传服务器url'
let url = host + key
_this.process = '上传完成'
_this.isDelAction = false
obj.resourceUrl = url
_this.recordForm.item.push(obj)
})
注意:
@change事件,上传时,如果连续上传同一张图片,则第二次不会再触发change事件
解决方法:同时给该input绑定click事件,清除该事件源e.target的value值,即e.target.value=''
原理:
- 当input捕获到焦点后,系统储存当前值
- 当input焦点离开后,判断当前值与之前存储的值是否不等,如果为true则触发onchange事件
input实现图片或视频上传(样式+代码)的更多相关文章
- FileReader与URL.createObjectURL实现图片、视频上传前预览
之前做图片.视频上传预览常用的方案是先把文件上传到服务器,等服务器返回文件的地址后,再把该地址字符串赋给img或video的src属性,这才实现所谓的文件预览.实际上这只是文件“上传后再预览”,这既浪 ...
- uni-app实现图片和视频上传功能
使用uni-app实现点击上传,既可以上传视频,有可以上传图片,图片预览,删除图片和视频功能,最终效果如下.uni-app里面没有提供同时上传视频和图片这个插件,只能靠自己手写, 1.页面布局 通过 ...
- iView + vue-quill-editor 实现一个富文本编辑器(包含图片,视频上传)
1. 引入插件(注意IE10以下不支持) npm install vue-quill-editor --savenpm install quill --save (Vue-Quill-Editor需要 ...
- 腾讯云点播视频存储(Web端视频上传)
官方文档 前言 所谓视频上传,是指开发者或其用户将视频文件上传到点播的视频存储中,以便进行视频处理.分发等. 一.简介 腾讯云点播支持如下几种视频上传方式: 控制台上传:在点播控制台上进行操作,将本地 ...
- 「小程序JAVA实战」小程序视频上传方法的抽象复用(57)
转自:https://idig8.com/2018/09/23/xiaochengxujavashizhanxiaochengxushipinshangchuanfangfadechouxiangfu ...
- Thinkphp5图片上传正常,音频和视频上传失败的原因及解决
Thinkphp5图片上传正常,音频和视频上传失败的原因及解决 一.总结 一句话总结:php中默认限制了上传文件的大小为2M,查找错误的时候百度,且根据错误提示来查找错误. 我的实际问题是: 我的表单 ...
- 自定义input文件上传样式
前言 文件上传是我们经常会用到的功能,但是原生的input样式太丑了,能不能自定义一个input文件上传样式呢?我这里写了两种方法,form表单提交跟ajax异步提交都没有问题,自动上传或者点击上传按 ...
- 表单多文件上传样式美化 && 支持选中文件后删除相关项
开发中会经常涉及到文件上传的需求,根据业务不同的需求,有不同的文件上传情况. 有简单的单文件上传,有多文件上传,因浏览器原生的文件上传样式及功能的支持度不算太高,很多时候我们会对样式进行美化,对功能进 ...
- 基于h5的图片无刷新上传(uploadifive)
基于h5的图片无刷新上传(uploadifive) uploadifive简介 了解uploadify之前,首先了解来一下什么是uploadify,uploadfy官网,uploadify和uploa ...
随机推荐
- rest api方式实现对文档库的管理
写在前面 刚入职一家新公司,在对接app的时候需要获取到某公司的sharepoint上面的文档库,获取文档库列表,团队文档库中的文件和文件夹列表,个人文档库中的文件文件夹列表,及在app端进入文件夹的 ...
- composer在phpstorm中安装代码库
E:\php\PHPTutorial\WWW\kmmhtt>composer install composer 安装地址 :https://getcomposer.org/download/
- 在consul上注册web服务
1. 创建web服务 IDEA->File->New->Project->Empty Project,project name取名provider,点击finish 2. 创建 ...
- Variables多种表达
Variables:TF基础数据之一,常用于变量的训练...重要性刚学TF就知道了 1.tf.Variable() tf.Variable(initial_value=None, trainable= ...
- 0初识Linux
今天三八妇女节,Linux就该这么学,开课第一天.信心满满,激动,期待,要努力了.(博客为预习写的,今天又做了更新.) Linux第一印象就是黑色背景屏幕,上面还有好多代码,敲的一手好的命令操控着 ...
- 转 java的JsonObject对象提取值
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson ...
- iptables随笔
iptables 分为四表五链 四表: filter表 nat 表 mangle 表 raw 表 五链 INPUT 链 OUTPUT 链 FORWARD 链 PREROUTING(路由前) POSTR ...
- Delphi TXLSReadWriteII导出Excel
TXLSReadWriteII导出Excle (有点复杂,可以自己简化一下,直接从项目中抓取的) procedure TformSubReport.DataToExcel(_Item: Integer ...
- Linux下NFS的搭建与配置
一.简介 1.NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布. 2.NFS可实现Linux系统之间的文件 ...
- 微信小程序---人脸识别(wx.startFacialRecognitionVerify)
1.由于人脸核验功能涉及到用户的敏感.隐私信息,因此调用此接口的业务方,需要满足一定的条件,申请小程序的人脸识别api.开通小程序后台的接口权限入口后,开发者可以登录mp.weixin.qq.com小 ...
