欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vue-python前后端下载文件

程序员文章站 2024-03-20 14:37:46
...

两种方式:

  1. pyhton后端下载文件,访问url的形式将文件下载到本地,然后通过文件流传到前端。或者直接将本地文件传递到前端。
  2. 仅前端通过url的形式直接下载,此时需要借助a标签。

下面试两种方式的代码例子:
方法一:

# Pyhton后端下载文件

def urlcallback(a, b, c):
    """
        call back function
        a,已下载的数据块
        b,数据块的大小
        c,远程文件的大小
    """
    print "callback"
    prec = 100.0 * a * b / c
    if 100 < prec:
        prec = 100
    print "%.2f%%" % (prec,)


def main():
    """
        main
    """
    print "start..."
    urllib.urlretrieve(
        "/home/zhangze/Downloads/sogoupinyin_2.3.1.0112_amd64 (1).deb", "./tmp", urlcallback)
    print "end..."

随后将文件内容全部读出保存再content中,返回给前端。{“content”:content}
如果是服务器本地文件,则直接将文件读出返回。

// 前端代码,通过创建Blob实例,来讲ajax请求获取的上述content内容写入到文件中。这里的name是文件名。

    let url = window.URL.createObjectURL(new Blob([content])); //处理文档流
          console.log(url);
          // let fileTye = url.match(/.+\/(.+)$/)[1];
          let link = document.createElement("a");
          link.style.display = "none";
          link.href = url;
          link.download = name;
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);

方法二:
直接跳过后台,仅需要前端通过url直接下载远程文件,这时候需要url是有效的。
download写个封装,直接调用就可,url为有效url路径,name是保存的文件名。
```javascript
    download(name, url) {
      var a = document.createElement("a");
      var e = document.createEvent("MouseEvents");
      e.initMouseEvent("click", false, false);
      a.href = url;
      a.download = name;
      a.dispatchEvent(e);
    },