mui 上传视频


mui 前端传输视频

//上传视频
            function videoUpload() {
                var url = ServerIp + "/api/upload/videoUpload";
                var task = plus.uploader.createUpload(url, {
                        method: "POST"
                    },
                    function(t, status) {
                        if (status == 200) {
                            var hl = document.getElementById('history');
                            hl.innerHTML = '
  • '; hl.style.display = 'none'; console.log("上传成功:" + t.responseText); videos = []; vindex = 1; } else { console.log("上传失败:" + status); videos = []; } } ); //添加其他参数 for (var i = 0; i < videos.length; i++) { var f = videos[i]; task.addFile(f.path, { key: f.name }); } task.addData("business_id", confirm_id); task.addData("business_type", "整改确认"); task.addData("item_id", _localStorage.getItem("record_id")); //记录表id task.addData("file_type", 2); task.addData("create_user", localStorage.getItem("realName")); task.start(); } var i = 1; var w = null; var videos = []; var vindex = 1; //上传视频 document.getElementById('video').addEventListener('tap', function(e) { if (mui.os.plus) { var buttonTit = [{ title: "录制" }, { title: "从手机相册选择" }]; plus.nativeUI.actionSheet({ cancel: "取消", buttons: buttonTit }, function(b) { switch (b.index) { case 0: break; case 1: getVideo(); //录制视频 break; case 2: galleryVideo(); //打开相册 break; default: break; } }) } }); //录制 function getVideo() { var cmr = plus.camera.getCamera(); cmr.startVideoCapture(function(p) { console.log('成功:' + p); plus.io.resolveLocalFileSystemURL(p, function(entry) { createItem(entry); appendVideo(p); }, function(e) { console.log('读取录像文件错误:' + e.message); }); }, function(e) { console.log('失败:' + e.message); }, { filename: '_doc/camera/', index: i }); } // 从相册中选择视频 function galleryVideo() { plus.gallery.pick(function(e) { plus.io.resolveLocalFileSystemURL(e, function(entry) { createItem(entry); //获取视频流文件 appendVideo(e); }, function(p) { console.log('读取录像文件错误:' + p.message); }); }, function(e) { console.log("取消选择视频"); }, { filter: "video" }); } // 添加播放项 function createItem(entry) { $("#history").remove(); var divHtml = "
    "; divHtml += "
    "; divHtml += "
    "; $("#imgDiv").prepend(divHtml); createItem1(entry); } function createItem1(entry) { var hl = document.getElementById('history'); //hl.innerHTML = '
  • ';
    //hl.style.display = 'block'; var le = document.getElementById('empty'); var li = document.createElement('div'); li.className = 'ditem'; li.innerHTML = '' li.setAttribute('onclick', 'displayFile(this)'); hl.insertBefore(li, le.nextSibling); li.querySelector('.ainf').innerText = '...'; li.entry = entry; updateInformation(li); // 设置空项不可见 le.style.display = 'none'; } function displayFile(li) { if (w) { mui.alert('重复点击!'); return; } if (!li || !li.entry) { mui.alert('无效的媒体文件'); return; } var name = li.entry.name; var suffix = name.substr(name.lastIndexOf('.')); var url = ''; if (suffix == '.mov' || suffix == '.3gp' || suffix == '.mp4' || suffix == '.avi') { url = '/plus/camera_video.html'; } else { url = '/plus/camera_image.html'; } w = plus.webview.create(url, url, { hardwareAccelerated: true, scrollIndicator: 'none', scalable: true, bounce: 'all' }); w.addEventListener('loaded', function() { w.evalJS('loadMedia("' + li.entry.toLocalURL() + '")'); }, false); w.addEventListener('close', function() { w = null; }, false); w.show('pop-in'); } // 获取录音文件信息 function updateInformation(li) { if (!li || !li.entry) { return; } var entry = li.entry; entry.getMetadata(function(metadata) { li.querySelector('.ainf').innerText = dateToStr(metadata.modificationTime); }, function(e) { console.log('获取文件"' + entry.name + '"信息失败:' + e.message); }); } //视频 function appendVideo(e) { videos = []; videos.push({ name: "file", //这个值服务器会用到,作为file的key path: e, }); vindex++; }

    视频播放页

    DOCTYPE HTML>
    <html>
        <head>
            <meta charset="utf-8"/>
            <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
            <meta name="HandheldFriendly" content="true"/>
            <meta name="MobileOptimized" content="320"/>
            <title>Hello H5+title>
            <script type="text/javascript" src="../js/extend.js">script>
            <script type="text/javascript">
    var v=null;
    function loadMedia( src ) {
        v.src = src;
        v.play();
    }
    function videoFinished() {
        back();
    }
    function videoError(e) {
        switch (e.target.error.code) {
         case e.target.error.MEDIA_ERR_ABORTED:
           alert('You aborted the video playback.');
           break;
         case e.target.error.MEDIA_ERR_NETWORK:
           alert('A network error caused the video download to fail part-way.');
           break;
         case e.target.error.MEDIA_ERR_DECODE:
           alert('The video playback was aborted due to a corruption problem or because the video used features your browser did not support.');
           break;
         case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
           alert('The video could not be loaded, either because the server or network failed or because the format is not supported.');
           break;
         default:
           alert('An unknown error occurred.');
           break;
       }
    
        plus.nativeUI.alert( "无效的视频资源", function(){
            back();
        } );
    }
    function init() {
        v = document.getElementById("video");
        //v.onended = videoFinished;
    }
            script>
            <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8"/>
        head>
        <body style="text-align:center;background:#DDDDDD;" onload="init();">
            <div style="width:100%;height:100%;display:table;" onclick="back();">
                <div style="display:table-cell;vertical-align:middle;">
                    <video id="video" style="width:100%;" autoplay controls onerror="videoError(event);">video>
                div>
            div>
        body>
    html>

    后台接口

    [Route("videoUpload"), HttpPost]
            public IHttpActionResult videoUpload()
            {
                bool result = false;
                int count = HttpContext.Current.Request.Files.Count;
                string filename = "";
                string compressname = "";
                try
                {
                    for (int i = 0; i < count; i++)
                    {
                        //int l = HttpContext.Current.Request.Files["video" + (i + 1)].ContentLength;
                        int l = HttpContext.Current.Request.Files["file"].ContentLength;
                        byte[] buffer = new byte[l];
                        //Stream s = HttpContext.Current.Request.Files["video" + (i + 1)].InputStream;
                        Stream s = HttpContext.Current.Request.Files["file"].InputStream;
                        string imgname = Guid.NewGuid().ToString() + ".mp4";
                        string comname = Guid.NewGuid().ToString();
                        AliyunOSS.PutObject(bucketName, "不符合项/" + imgname, s);
                        #region 记录表
                        im_file file = new im_file();
                        file.id = Guid.NewGuid().ToString();
                        file.business_id = HttpContext.Current.Request.Form["business_id"];
                        file.business_type = HttpContext.Current.Request.Form["business_type"];
                        file.item_id = HttpContext.Current.Request.Form["item_id"];
                        file.file_name = "不符合项/" + imgname;
                        file.file_path = filename;
                        file.compressedfile_path = compressname;
                        file.file_type = 2;
                        file.create_user = HttpContext.Current.Request.Form["create_user"];
                        file.create_date = DateTime.Now;
                        _fileRepository.Insert(file);
                        #endregion
                        result = true;
                    }
                }
                catch (Exception e)
                {
                    result = false;
                }
                return Ok(result);
            }
    mui