layui上传视频并获得视频时长的方法

layui官方上传视频时并没直接提供获取视频时长的方法,需要我们间接获得

HTML增加一个<video>标签,因为video标签可以帮我们获取视频时长

<video id="videoattr" width="250" height="100" ></video>

当然,你也可以设置隐藏。

然后JS就可以利用<video>的duration来得到时长。

//同时绑定多个元素,并将属性设定在元素上
upload.render({
    elem: ‘.upload-menu‘,
    url: ‘http://upload-z2.qiniup.com‘,//上传到七牛云
    multiple: false, //是否允许多文件上传。设置 true即可开启。不支持ie8/9
    bindAction:‘#add‘,
    accept:‘video‘,
    size:10240,//KB,不能大于10M
    auto:false,//自动上传
    data:{
        token: function(){
            var token;
            $.ajax({
                async: false,//ajax 非异步获取taken
                type: ‘post‘,
                url: ‘{:url(‘Articles/getToken‘)}‘,
                success: function (res) {
                    token = res;
                }
            });
            return token;
        }
    },
    choose:function(obj){
        //预读本地文件示例,不支持ie8
        layer.load(2);
        obj.preview(function(index, file, result){
            var url = URL.createObjectURL(file);//把file转成URL
            $(‘#videoattr‘).attr(‘src‘, url); //视频链接
            var timer = setTimeout(function(){
                layer.close(layer.index);
                var video_time = document.getElementById("videoattr").duration;//视频时长
                console.log(video_time);
                if(video_time>60){
                    layer.msg(‘上传视频不能超过60秒‘, {icon: 2})
                }else{
                    $(‘#add‘).css("visibility","visible"); //一开始先将确认上传按钮隐藏,得到视频时长后才开放
                }
                clearTimeout(timer);
            },1000);
        });
    },
    before: function(obj) {
       //console.log(obj);
        layer.msg(‘上传中...‘, {
            icon: 16,
            shade: 0.01,
            time: 0
        })
    },
    done: function(res) {
        console.log(res.data);
        //return false;
        layer.close(layer.msg(‘上传成功!‘));//下面是把上传以后的图片显示出来
        var html=‘<div class="thumb-list"><i class="layui-icon close-icon">ဆ</i><img src="‘+res.data.src+‘" title="‘+res.key+‘"></div>‘;
        $(‘.thumb-box‘).append(html);
        thumb.push(res.data.src);
        if($(‘.thumb-list‘).length == 9){
            $(‘.upload-menu‘).hide();
        }
    }
    ,error: function(){
        layer.msg(‘上传错误!‘);
    }
});

一开始先将确认上传按钮隐藏,防止还没得到视频时长就已经开始上传导致参数错误等问题。

另外,必须设置setTimeout定时器,因为代码的执行是并行的,防止<video>还没加载完就向它获取时长,这样得到的结果将会是NaN

原文地址:https://www.cnblogs.com/panziwen/p/12182048.html

时间: 2024-08-10 21:28:47

layui上传视频并获得视频时长的方法的相关文章

如何自学Struts2之Struts2文件上传和数据库访问[视频]

如何自学Struts2之Struts2文件上传和数据库访问[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 由于上次视频没有声音,所以在这节课"Struts2数据库访问"一起再讲一下.

H5上传前预览视频(结合 video标签 &amp;&amp;h5 fileApi)

2017/09/14 发布 js代码: // hTML5实现表单内的上传文件框,上传前预览视频,刷新预览video,使用HTML5 的File API, // 建立一个可存取到该file的url,一个空的video标签,ID为video0,把选择的文件显示在video标签中,实现视频预览功能. // 需要选择支持HTML API的浏览器. $("#video").change(function(){ var objUrl = getObjectURL(this.files[0]) ;

Java获取视频的大小、时长

前端上传视频之后,根据上传的视频文件获取视频的大小和时长 1.获取视频时长 private String ReadVideoTime(File source) { Encoder encoder = new Encoder(); String length = ""; try { MultimediaInfo m = encoder.getInfo(source); long ls = m.getDuration()/1000; int hour = (int) (ls/3600);

网页上传到服务器后访问时出现怪异模式(Quirks mode)

1.更多内容请参考:http://blog.csdn.net/freshlover/article/details/11616563 http://blog.csdn.net/barebear/article/details/5100260 2.当使用jsp+tomcat+mysql开发时,将tomcat上传到服务器后,使用360浏览器通过ip访问网站时,本来很好的网站样式会变得混乱,导航栏,图片,特别是盒模型会有很大的变化.使用360的工具->开发人员工具.查看网页文档模式时,发现使用的是Qi

ASP.Net中实现上传过程中将文本文件转换成PDF的方法

iTextSharp是一个常用的PDF库,我们可以使用它来创建.修改PDF文件或对PDF文件进行一些其他额外的操作.本文讲述了如何在上传过程中将文本文件转换成PDF的方法. 基本工作 在开始之前,我们需要从这个URL下载iTextSharp.除此之外,也可以使用”NuGet Package Manager” 将它从NuGet上下载到项目的解决方案中.下面通过屏幕截图来进行讲解. 代码 为了操作简洁,我设计了一个带上传控件和一个按钮的webform.HTML代码如下: <!DOCTYPE html

Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】

转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录名及文件名中的中文显示为“??”. 原因: FTP协议里面,规定文件名编码为iso-8859-1,所以目录名或文件名需要转码. 解决方案: 1.将中文的目录或文件名转为iso-8859-1编码的字符.参考代码: 复制代码 代码如下: String name="目录名或文件名"; name=

asp.net 文件上传出错:Maximum request length exceeded 解决方法

<configuration>    <system.web>               <httpRuntime maxRequestLength="102400" useFullyQualifiedRedirectUrl="true" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="10

上传文件到新浪云Storage的方法

上传文件到新浪云Storage的方法,兼容本地服务器 if (!empty($_FILES['sharepic']['name'])){ $tmp_file = $_FILES['sharepic']['tmp_name']; $file_types = explode(".", $_FILES['sharepic']['name']); $file_type = $file_types[count($file_types) - 1]; /*设置上传路径*/ if (isset($_S

使用resumable.js上传大文件(视频)兵转换flv格式

前台代码 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Video.aspx.cs" Inherits="BPMS.WEB.Video" %> 2 3 <!DOCTYPE html> 4 5 <html xmlns="http://www.w3.org/1999/xhtml"> 6 <head