zoukankan      html  css  js  c++  java
  • 前端url下载视频资源

    下载url视频有以下几种方案:

    1.a标签download,但是这种因为浏览器机制会先打开预览,图片与视频都是这样。在预览页面右键下载。如果想通过a标签直接下载,可以通过设置Nginx配置。

      

    // url为资源地址
    // newName为资源的原名称
    // a标签的url a标签的download属性并不能修改名称,这时候我们就需要用到nginx的一个默认配置renameto达到重置名称的效果
    const tepmUrl = url + '?renameto=' + newName
    

      

    server {
            listen 8086;
            server_name 192.168.1.66;
            location / {
                proxy_pass http://127.0.0.1:8086;
                root html;
                index index.html index.htm;
            }
            location /image/ {
                root html/devGif;
                autoindex on;
                // 主要配置
                 if ($request_filename ~* ^.*?.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx|jpg|png)$){
                   add_header Content-Disposition 'attachment';
                }
            //end
            }
    }
    

      

    2.通过前端二进制文件流容器,blob对象进行操作。通过xmlHttpRequest进行访问视频url地址,得到视频数据后

      转为二进制文件流保存在blob对象, 再通过createObjectURL创建一个包含二进制文件流额url,再通过创建

      a标签设置下载地址,主动调用下载操作,进行视频二进制文件流下载

    示例代码如下:

      function  downFile() {
          let url = 'https://xxxx.com"   
          let name = '视频资源'
          let xhr = new XMLHttpRequest()
          xhr.open('GET', url, true)
          xhr.responseType = 'blob' // 返回类型blob
          // 监听进度
          xhr.onprogress = function (e) {
            if (e.lengthComputable) {
              // 文件总体积
              console.log(e.total)
              // 已下载体积
              console.log(e.loaded)
            }
          }
          xhr.onload = function () {
            if (xhr.readyState === 4 && xhr.status === 200) {
              let blob = this.response
              // 转换一个blob链接
              let u = window.URL.createObjectURL(new Blob([blob]))
              let a = document.createElement('a')
              a.download = name
              a.href = u
              a.style.display = 'none'
              document.body.appendChild(a)
              a.click()
              a.remove()
              // 释放
              window.URL.revokeObjectURL(u)
            }
          }
          xhr.onerror = function () {
            console.log('失败')
          }
          xhr.send()
        },
    

      

  • 相关阅读:
    040 Android TCP协议的Socket通信
    039 Android SQLite数据库(了解)
    Navicat 连接Sqlite数据库的方法和步骤
    038 Android File文件存储功能
    037 Android SharedPreferences应用实例(记录App的使用次数)
    036 Android SharedPreferences(数据存储,需掌握)
    035 Android 广播(BroadCastReceiver)
    SharePoint2013打印列表项对象
    SharePoint2013所有列表绑定到DropDownList1中
    通过主机标头实现多个SharePoint Web应用程序共用一个端口(
  • 原文地址:https://www.cnblogs.com/mamimi/p/15693860.html
Copyright © 2011-2022 走看看