Django + Axios:文件下载无法在Firefox中运行

时间:2018-01-13 19:57:36

标签: django firefox download vuejs2 axios

我正在使用Axios发送我的Django后端信息,后者又创建了一个文件并将其发送回前端。我在下面的代码在Safari和Chrome中运行良好。但是,该文件不会在Firefox中下载。顺便说一句,firefox控制台或Django中没有出现任何错误。

Axios公司

axios({
  method:'post',
  url:'/api/downloadDoc',
  responseType:'blob',
  data: params,
})
.then(response => {
  let blob = new Blob([response.data], {type: 'application/force-download'})
  let link = document.createElement('a')
  link.href = window.URL.createObjectURL(blob)
  link.download = "YourPaper.docx"
  link.click()

})
.catch(e => {
  console.log(e)
})

Django查看发送文件

def downloadPaper(request):

    if request.method == "POST":
        #Recieve info through post and create document
        #variable path is path to newly created document

        wrapper = FileWrapper(open(path, 'rb'))
        response = HttpResponse(wrapper, content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
        response['Content-Disposition'] = 'attachment; filename=' + 'yourpaper.docx'
        response['Content-Length'] = os.path.getsize(path)

        return response

    return HttpResponse(status=405)

我希望有人知道可能导致firefox无法下载的原因。 谢谢!

1 个答案:

答案 0 :(得分:0)

fetch("/api/admin/plugin/download/" + id , { method: 'GET', headers: new Headers({ "Authorization": this.token, "Allow-Control-Allow-Origin": "*", "Content-Type" : "application/octet-stream" }), }).then(response => { response.blob().then(blob => { let url = window.URL.createObjectURL(blob); let a = document.createElement('a'); // must add <a> to body, then it works document.body.appendChild(a); a.style.display = 'none'; a.href = url; a.download = decodeURI(response.headers.get("filename")); a.click(); document.body.removeChild(a); }); })