如何使用vue从json api后端下载文件?

时间:2017-03-19 01:20:46

标签: javascript vue.js

我有一个带有vue.js前端的rails api后端和简单的jwt身份验证。

因此,有2台服务器localhost:80803000

如何从与json响应相关的链接下载pdf文件。

{
  "id": 25,
  "title": "test",
  "export_pdf": "http://localhost:3000/api/v1/export/25.pdf",
}

使用以下代码,我收到unauthorized错误,因为localhost:3000

上没有本地存储
<li><a :href="project.export_pdf" download='report'>Export as PDF</a></li>

-

我也在使用axios

如果我做这样的事情

  exportPdf: (url) => {
    return axios.get(url, auth.getHeader())
  }

它将返回以下

Object {data: "gibberish text", status: 200, statusText: "OK", headers: Object, config: Object…}

3 个答案:

答案 0 :(得分:0)

您应该更改responseType的{​​{1}},以便blob正确解析数据。您的后端必须在此文件中返回标头axios

另外,我认为您无法通过Ajax下载它。我无法理解你对锚点的理由,LocalStorage在那里改变了什么?

答案 1 :(得分:0)

请尝试以下:

<a href="project.export_pdf" target="_blank">Export to PDF</a>

答案 2 :(得分:0)

我决定在下载链接的末尾添加下载令牌。

所以,现在我可以做以下

http://localhost:3000/api/v1/projects/28/export?tkn=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9

然后,在我的前端

<li><a :href="dllink" download='report.pdf'>Export as PDF</a></li>

-

dllink () {
 let tkn = window.localStorage.getItem('tkn')
 return `${this.project.export_pdf}?tkn=${tkn}`
}