博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
input实现图片或视频上传(样式+代码)
阅读量:5280 次
发布时间:2019-06-14

本文共 3224 字,大约阅读时间需要 10 分钟。

背景:vue/element.ui

 

 1..html:

单个图片上传大小限制:10M

图片数限制:1张至6张

注意

  1. input标签的accept属性,设置上传图片的格式
  2. 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=''

原理:

  1. 当input捕获到焦点后,系统储存当前值
  2. 当input焦点离开后,判断当前值与之前存储的值是否不等,如果为true则触发onchange事件

 

转载于:https://www.cnblogs.com/fancyLee/p/9319797.html

你可能感兴趣的文章
composer 报 zlib_decode(): data error
查看>>
hdu 3938 并查集
查看>>
《深入分析Java Web技术内幕》读书笔记之JVM内存管理
查看>>
python之GIL release (I/O open(file) socket time.sleep)
查看>>
软件开发与模型
查看>>
161017、SQL必备知识点
查看>>
kill新号专题
查看>>
MVC学习系列——Model验证扩展
查看>>
字符串
查看>>
vue2.x directive - 限制input只能输入正整数
查看>>
实现MyLinkedList类深入理解LinkedList
查看>>
自定义返回模型
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 客户端多网络支持
查看>>
HDU 4122
查看>>
Suite3.4.7和Keil u3自带fx2.h、fx2regs.h文件的异同
查看>>
打飞机游戏【来源于Crossin的编程教室 http://chuansong.me/account/crossincode 】
查看>>
[LeetCode] Merge Intervals
查看>>
【翻译自mos文章】当点击完 finishbutton后,dbca 或者dbua hang住
查看>>
Linux编程简介——gcc
查看>>
2019年春季学期第四周作业
查看>>