兩種方式:
- pyhton後端下載文件,訪問url的形式將文件下載到本地,然後通過文件流傳到前端。或者直接將本地文件傳遞到前端。
- 僅前端通過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);
},