2

我正在尝试使用 vue 从服务器下载文件

当我导演访问我的后端 API 时,它运行良好,我可以正常解压缩我的文件。

但是当我尝试通过axios响应下载文件时,文件无法解压,而且如果我没有设置link.download,文件名不正确。就像那样 在此处输入图像描述

这是我的 vue 的 api

export function packMaterials (context, thesisId, filename) {
  context.$axios({
    method: 'get',
    headers: getAuthHeader(),
    url: PACK_URL + thesisId
  })
    .then(function (response) {
      console.log(response)
      let blob = new Blob([response.data], { type: 'application/force-download' })
      let link = document.createElement('a')
      link.href = window.URL.createObjectURL(blob)
      link.download = filename
      link.click()
    })
    .catch(function (error) {
      console.log(error)
    })
}

这是我的 Django API

 if os.path.exists(file_path):
    # 返回file
    with open(file_path, 'rb') as fh:
        response = HttpResponse(fh.read(), content_type="application/force-download")
        response['Content-Disposition'] = "attachment; filename={}".format(escape_uri_path(filename))
        return response

这是控制台中的响应数据。 英语不是我的母语,所以如果我的描述不清楚,您可以通过 lc960127@gmail.com 与我联系,我会发送更多详细信息。在此处输入图像描述

谢谢

4

1 回答 1

0

我遇到过同样的问题。看来您只需要将 axios resposeType配置为“blob”:

axios({
    method: 'get’,
    responseType: ‘blob’, // <— Change here
    headers: getAuthHeader(),
    url: PACK_URL + thesisId
})
于 2021-01-20T09:31:31.463 回答