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 ...
随机推荐
- python网络爬虫学习笔记(一)Request库
一.Requests库的基本说明 引入Rquests库的代码如下 import requests 库中支持REQUEST, GET, HEAD, POST, PUT, PATCH, DELETE共7个 ...
- is,as,类库
is和as运算符: 所有类型的基类 object类型 - 基类:所有类型的基类,就类似是整个生物圈的生物类,是个大的概念 object o1 = new Random(); //object可以承载R ...
- Cookie的存活时间
1. 默认情况下,cookie数据保存到内存里,当浏览器关闭后,Cookie数据被销毁 2. 持久化存储: setMaxAge(int seconds) 1. 正数:将Cookie数据写到硬盘的文件中 ...
- Angularjs启动入口, splash画面,与加快启动的技巧
Angularjs启动入口, splash画面,与加快启动的技巧 Angularjs启动入口 * 自动响应DOMContentLoaded event * 从ngApp指定的入口启动: 在angula ...
- 【Linux】【Jenkins】编译过程中遇到ERROR: Failed to parse POMs的解决方案
自动化构建的时候报错,网搜查询说是maven的jenkinks配置问题导致的.修改系统工具配置的maven配置就可以了 Started by user XX Building in workspace ...
- Jvm的体系结构
1.垃圾回收器 垃圾回收器(又称为gc):是负责回收内存中无用的对象(好像地球人都知道),就是这些对象没有任何引用了,它就会被视为:垃圾,也就被干掉了. 2.类装载子系统 一听名字,大家就知道,肯定是 ...
- Laravel中队列的使用
以laravel5.5为例子: 1.配置队列:composer require "predis/predis:~1.0" a.在ENV中配置:QUEUE_DRIVER=redis ...
- leetcode3
public class Solution { public int LengthOfLongestSubstring(string s) { var dic = new Dictionary< ...
- Sql入门学习——基本语法函数
--------使用工具navicat 快捷键操作 --------基本操作DML &DDL --------运算比较 --------数据类型 --------常用函数 --------常用 ...
- window、location、location.href、self、top简单介绍
1.self:当前窗口对象(如果是在iframe里,则为该框架的窗口对象) 2.top:父窗口对象 3.window:典型情况下,浏览器会为每一个打开的html创建对应的window对象,如果这个文档 ...
