从 ERP (weclapp) 的 API 调用中下载在 Javascript 中进行 FlateDecoded 的 PDF
Download a PDF received from an API call from ERP (weclapp) that is FlateDecoded in Javascript
我打算通过 API 电话接收 pdf 以直接下载。
我得到的结果如下所示:
%PDF-1.4
%����
4 0 obj
<</Filter/FlateDecode/Length 983>>stream
x��Xo�0Է<ѭC�:�H�]`
����ڍ��֕n"$�
我需要做什么才能下载这个?我在 vuejs/axios 作为前端工作,并打算使用 express 作为后端。
我在这里发现了一个类似的问题,但没有解决方案:Download PDF file from api using javascript IE9
我实现了代码,但生成的弹出窗口只是保持白色
通常它似乎是带有 FlateDecode-filter 的 pdf。
我有这个实用程序可以从 API url 下载文件。
import axios from "axios";
/**
* utility to download a File from an api url.
* @param config (optional) config for axios
*/
export default function download(url, config) {
return axios.get<Blob>(url, {
...config,
responseType: "blob"
}).then(response => {
// get filename from content-disposition header
const contentDisposition = response.headers["content-disposition"];
const fileName = contentDisposition.match(/\bfilename=([^;]*)/)[1].trim();
//"save" file to hard disk
const link = document.createElement("a");
link.href = URL.createObjectURL(response.data);
link.setAttribute("download", fileName);
document.body.appendChild(link);
link.click();
// cleanup
setTimeout(() => {
link.parentNode.removeChild(link);
}, 3000);
return response;
})
}
所以我在这个线程中找到了这个有效的答案:https://gist.github.com/javilobo8/097c30a233786be52070986d8cdb1743
似乎有很多不同的方法可以解决这个问题。
await this.$axios( this.api_url,
{method: 'GET', responseType: 'blob', headers: {"AuthenticationToken": this.api_token} }
).then(response => {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
// works in IE11
if (typeof window.navigator.msSaveBlob === 'function') {
window.navigator.msSaveBlob(
response.data,
`${filename}.pdf`
);
} else {
link.setAttribute('download', `filename.pdf`);
document.body.appendChild(link);
link.click();
}
});
我打算通过 API 电话接收 pdf 以直接下载。 我得到的结果如下所示:
%PDF-1.4
%����
4 0 obj
<</Filter/FlateDecode/Length 983>>stream
x��Xo�0Է<ѭC�:�H�]`
����ڍ��֕n"$�
我需要做什么才能下载这个?我在 vuejs/axios 作为前端工作,并打算使用 express 作为后端。
我在这里发现了一个类似的问题,但没有解决方案:Download PDF file from api using javascript IE9 我实现了代码,但生成的弹出窗口只是保持白色
通常它似乎是带有 FlateDecode-filter 的 pdf。
我有这个实用程序可以从 API url 下载文件。
import axios from "axios";
/**
* utility to download a File from an api url.
* @param config (optional) config for axios
*/
export default function download(url, config) {
return axios.get<Blob>(url, {
...config,
responseType: "blob"
}).then(response => {
// get filename from content-disposition header
const contentDisposition = response.headers["content-disposition"];
const fileName = contentDisposition.match(/\bfilename=([^;]*)/)[1].trim();
//"save" file to hard disk
const link = document.createElement("a");
link.href = URL.createObjectURL(response.data);
link.setAttribute("download", fileName);
document.body.appendChild(link);
link.click();
// cleanup
setTimeout(() => {
link.parentNode.removeChild(link);
}, 3000);
return response;
})
}
所以我在这个线程中找到了这个有效的答案:https://gist.github.com/javilobo8/097c30a233786be52070986d8cdb1743
似乎有很多不同的方法可以解决这个问题。
await this.$axios( this.api_url,
{method: 'GET', responseType: 'blob', headers: {"AuthenticationToken": this.api_token} }
).then(response => {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
// works in IE11
if (typeof window.navigator.msSaveBlob === 'function') {
window.navigator.msSaveBlob(
response.data,
`${filename}.pdf`
);
} else {
link.setAttribute('download', `filename.pdf`);
document.body.appendChild(link);
link.click();
}
});