如何通过从 input type='file' 中选择来设置多个视频文件的预览

Posted

技术标签:

【中文标题】如何通过从 input type=\'file\' 中选择来设置多个视频文件的预览【英文标题】:How can I set preview of multiple video file, by selecting from input type='file'如何通过从 input type='file' 中选择来设置多个视频文件的预览 【发布时间】:2021-05-24 12:17:02 【问题描述】:

我的查询是:如何通过从 input type='file' 中选择来设置多个视频文件的预览?

我已经通过从输入 here 中选择本地视频来检查单个视频文件预览。

但我想一次选择多个视频,它应该在同一类的不同 div 中的不同 html5 播放器中一起预览所有视频,就像这张图片一样。

这是上传多个视频后的格式:

<div class="videoplayer">
<video controls="" autoplay="" src="//video-file-1.mp4"></video>
</div>

<div class="videoplayer">
<video controls="" autoplay="" src="//video-file-2.mp4"></video>
</div>

<div class="videoplayer">
<video controls="" autoplay="" src="//video-file-3.mp4"></video>
</div>

我该怎么做?

单个视频预览器:

(function localFileVideoPlayer() 
    'use strict'
  var URL = window.URL || window.webkitURL
  var displayMessage = function (message, isError) 
    var element = document.querySelector('#message')
    element.innerHTML = message
    element.className = isError ? 'error' : 'info'
  
  var playSelectedFile = function (event) 
    var file = this.files[0]
    var type = file.type
    var videoNode = document.querySelector('video')
    var canPlay = videoNode.canPlayType(type)
    if (canPlay === '') canPlay = 'no'
    var message = 'Can play type "' + type + '": ' + canPlay
    var isError = canPlay === 'no'
    displayMessage(message, isError)

    if (isError) 
      return
    

    var fileURL = URL.createObjectURL(file)
    videoNode.src = fileURL
  
  var inputNode = document.querySelector('input')
  inputNode.addEventListener('change', playSelectedFile, false)
)()
video, input 
    display: block;


input 
    width: 100%;       


.info 
    background-color: aqua;            


.error 
    background-color: red;
    color: white;
<h1>HTML5 local video file player example</h1>
<div id="message"></div>
<input type="file" accept="video/*"/ multiple>
<video controls autoplay></video>

【问题讨论】:

【参考方案1】:

在这种情况下,您最好使用 createObjectURL。

document.querySelector("input[type=file]").onchange = function(event) 
    var numberOfVideos = event.target.files.length;
    for (var i = 0; i < numberOfVideos; i++) 
        var file = event.target.files[i];
        var blobURL = URL.createObjectURL(file);
        var video = document.createElement('video');
        video.src = blobURL;
        video.setAttribute("controls", "")
        var videos = document.getElementById("videos");
        videos.appendChild(video);
    
videowidth: 500px
<input type="file" name="video" multiple>
<div id="videos"></div>

【讨论】:

以上是关于如何通过从 input type='file' 中选择来设置多个视频文件的预览的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 不能通过从数据库中检索大文件来工作

通过从 RawContacts 过滤 account_type 列来显示联系人

刚从相机拍摄并通过从图库中挑选显示的Android裁剪图像

如何通过从 CloudFormation 中删除来从 DynamoDb 中删除全局二级索引?

如何通过从另一个下拉列表中选择值来填充下拉列表?

如何通过从结果中减去数字来计算嵌套关系和附加字段