对服务器的Axios请求以二进制字符串的形式响应PDF的内容。
export const fetchPDFfile = async (id: string): Promise<string> => {
const { data } = await http.get<string>(`${baseUrl}/${id}.pdf`);
return data;
};
Chrome devtools中的响应以及控制台记录数据的方式如下:
%PDF-1.4
%âãÏÓ
2 0 obj <</ColorSpa ......
..........
startxref
10991
%%EOF
- 是否将
string
定义为Axios响应主体的预期类型,对吗?还是应该(广播到)Blob?
现在,我想在客户端将其下载为PDF文件。对此有很多问题,但没有一个对我有用,也没有一个明确的答案。
所以到目前为止,我所做的是(在React组件中):
const data = await fetchPDFfile(props.id);
const blob = new Blob([data],{ type: 'application/pdf' });
const href = window.URL.createObjectURL(blob);
const theLink = document.createElement('a');
theLink.href = href;
theLink.download = props.id + '.pdf';
document.body.appendChild(theLink);
theLink.click();
document.body.removeChild(theLink);
这将下载3页空白的PDF文件。页数正确,原始文档应为3页。但是我看到了白皮书。
const href = window.URL.createObjectURL(data); // istead of blob
引发错误。
我应该如何转换和下载此PDF文件?通常,是否需要上述过程,还是应该直接从服务器下载该过程? (类似于cordova-plugin-file-transfer所做的事情)