html

<el-form-item class="upload-bg register-bg" prop="ad_url">
<div class="hide-video-box"></div>
<el-upload
class="avatar-uploader"
ref="upload"
:action="upload_url"
list-type="picture-card"
:name="upload_name"
:on-remove="handleRemove"
:on-exceed="handleExceed"
:file-list="ad_url_list"
:limit="1"
:http-request="uploadSectionFile">
<span class="font-14">选择图片或视频</span>
<div slot="tip" class="el-upload__tip">尺寸750*1125px,大小2M以内,视频支持MP4</div>
</el-upload>
</el-form-item>

js

data: function(){
return {
upload_url: '',//上传URL
upload_name: '',//图片或视频名称
ad_url: '',//上传后的图片或视频URL
ad_url_list: [],//预览列表
}
},
methods: {
handleExceed: function () {
_.$alert('请先删除选择的图片或视频,再上传', '提示', {
type: 'warning'
});
},
handleRemove: function (res, file) {
var self = this;
self.ad_url = '';
var liItem = document.getElementsByClassName('hide-video-box')[0];
liItem.innerHTML = '';
},
uploadSectionFile: function (params) {
var self = this,
file = params.file,
fileType = file.type,
isImage = fileType.indexOf('image') != -1,
isVideo = fileType.indexOf('video') != -1,
file_url = self.$refs.upload.uploadFiles[0].url; var isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
_.$alert('上传图片或视频大小不能超过 2MB!', '提示', { type: 'error' });
self.$refs.upload.uploadFiles = [];
return;
} if(!isImage && !isVideo){
_.$alert('请选择图片或视频!', '提示', { type: 'error' });
self.$refs.upload.uploadFiles = [];
return;
} if (isImage) {
var img = new Image();
img.src = file_url;
img.onload = function () {
if (img.width !== 750 || img.height != 1125) {
_.$alert('图片尺寸为750*1125px', '提示', { type: 'error' });
//将上传列表清空
self.$refs.upload.uploadFiles = [];
return;
}
//图片上传
self.upload_url = '你的图片上传URL';
self.upload_name = 'file_img[]';
self.uploadFile(file, isVideo, '');
}
} else if (isVideo) {
var isMP4 = file.type === 'video/mp4';
if (!isMP4) {
_.$alert('上传视频只支持 mp4 格式!', '提示', { type: 'error' });
self.$refs.upload.uploadFiles = [];
return;
}
var videoDiv = document.createElement('video');
var liItem = document.getElementsByClassName('hide-video-box')[0];
videoDiv.src = file_url;
liItem.appendChild(videoDiv); videoDiv.onloadeddata = function (event) {
var target = event.target;
var width = target.offsetWidth;
var height = target.offsetHeight; if (width !== 750 || height != 1125) {
_.$alert('视频尺寸为750*1125px', '提示', { type: 'error' });
//将上传列表清空
self.$refs.upload.uploadFiles = [];
return;
} //视频上传
self.upload_url = '你的视频上传URL';
self.upload_name = 'file_video[]';
self.uploadFile(file, isVideo, videoDiv);
}
}
},
uploadFile: function (file, isVideo, videoDiv) {
var self = this,
formData = new FormData();
formData.append(self.upload_name, file); axios.post(self.upload_url, formData, { headers: { 'Content-Type': 'multipart/form-data' } })
.then(function (res) {
if (res.result === '0000') {
self.ad_url = res.data[0];
//创建一个显示video的容器
if (isVideo) {
var liItem = document.getElementsByClassName('el-upload-list__item')[0];
videoDiv.style.width = '278px';
videoDiv.style.height = '415px';
liItem.prepend(videoDiv);
}
return;
}
_.$alert('上传失败,请重新上传', '提示', { type: 'error' });
self.$refs.upload.uploadFiles = [];
})
.catch(function (err) {
console.error(err);
});
}
}

element-ui el-upload http-request自定义上传方法的更多相关文章

  1. Django 批量保存图片文件 自定义上传方法

    1.前端通过formData的方式批量增加图片或文件 for (var i = 0; i < form_img_list.length; i++) { formData.append('imag ...

  2. UI组件--element-ui--Upload多组件自定义上传

    需求: 提交详细信息的表单, 并上传对应图片(如下图), 后台接口要求表单数据和图片需要一次上传完成.. 分析: 实际上, 每个element-ui Upload组件都应发送一次请求, 很明显不符合我 ...

  3. 使用element UI el-upload组件实现视频文件上传及上传进度显示方法总结

    实现效果: 上传中: 上传完成: 代码: <el-form-item label="视频上传" prop="Video"> <!-- acti ...

  4. vue问题三:element ui的upload组件上传图片成功和移除事件

    element ui的upload组件上传图片成功和移除事件: 登录后获取到后台传的token存到中: sessionStorage.setItem("token",data.ob ...

  5. AntD框架的upload组件上传图片时使用customRequest方法自定义上传行为

    本次做后台管理系统,采用的是 AntD 框架.涉及到图片的上传,用的是AntD的 upload 组件. 我在上一篇文章<AntD框架的upload组件上传图片时使用customRequest方法 ...

  6. SharePoint 2010 ——自定义上传页面与多文件上传解决方案

    最近项目遇到一个很麻烦的问题,原以为很容易解决,结果搞了那么久,先开个头,再慢慢写 SharePoint 2010 ——自定义上传页面与多文件上传解决方案 1.创建Sharepoint空白项目,创建应 ...

  7. MVC文件上传05-使用客户端jQuery-File-Upload插件和服务端Backload组件自定义上传文件夹

    在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小  MVC文 ...

  8. [k]自定义上传文件按钮样式

    <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title> ...

  9. drupal7 开发自定义上传、下载模块的上传功能

    关键点有两个:1.在页面上显示出上传的控件,2.代码实现文件上传到服务器的功能 一.显示控件: 先来看关键点1: 实现页面显示出上传控件, 关键代码: $form['my_file_field'] = ...

随机推荐

  1. 了解jQuery的detach()和remove()

    jQuery中提供了两种移出一个DOM元素的方法detach()和remove(),虽然是一样的功能,但是给出两种方法,必然有它的不同之处. empty() 单独说一下 ,它删除当前元素的所有子元素, ...

  2. 关于select的困惑

    困惑 首先,我知道select是IO复用.以UDP为例,select流程大体如下: for(;;) { //通过FD_SET告诉内核你感兴趣的fd fd_set read_fds; FD_CLEAR( ...

  3. etcd安装和简单使用

    etcd作为一个高可用强一致性的服务发现存储仓库,在Kubernetes等开源项目中用的很多,这里简单记录下安装和常用命令以及api 安装 安装包可以从 https://github.com/etcd ...

  4. kubernetes之download api

    download api作用: 可以通过环境变量或Volume挂载将pod信息注入到容器内部 apiVersion: apps/v1 kind: Deployment metadata: name: ...

  5. [Abp vNext微服务实践] - vue-element-admin登录一

    简介 之前的技术路线本来是angular的,后来经过一段时间的开发还是打算选择vue,原因是vue简单丰富,尽管angular规范强大,但是组件库都不太符合国人风格.看到GitHub上Vue Elem ...

  6. DATASNAP双缓存下载文件

    原文链接:http://www.cnblogs.com/hnxxcxg/archive/2012/12/29/2839358.html procedure TFrmMain.btnUpdateFile ...

  7. PEP8规范 Python

    前言 从很多地方搬运+总结,以后根据这个标准再将python的一些奇技淫巧结合起来,写出更pythonic的代码~ PEP8 编码规范 英文原版请点击这里 以下是@bobo的整理,原文请见PEP8 P ...

  8. (转)再过半小时,你就能明白kafka的工作原理了

    为什么需要消息队列 周末无聊刷着手机,某宝网APP突然蹦出来一条消息“为了回馈老客户,女朋友买一送一,活动仅限今天!”.买一送一还有这种好事,那我可不能错过!忍不住立马点了去.于是选了两个最新款,下单 ...

  9. rac 数组之遍历

    rac的数组遍历其实很简单.但是有个点需要注意. 以下先举个例子说明遍历的用法 NSArray *temArr = @["]; [temArr.rac_sequence.signal sub ...

  10. CSS3 -- 弹性盒

    新版弹性盒 兼容到IE10及以上 flex小游戏 display: flex; 设置为弹性盒(父元素添加) flex-direction 用来来确定主轴的方向,从而确定基本的项目排列方向. 参数 说明 ...