const url = window.URL.createObjectURLnew Blob(resdata): const link = document.createElement/a'): link href = urt: link setAttribute(download,"项目列表.xlsx"); document.body.appendChild(link); link.click(); 代码解析
时间: 2023-06-06 13:04:31 浏览: 142
:这是一个将后端返回的数据转换为Blob对象,并生成可下载链接的JavaScript代码。其中,Blob构造函数接收一个参数resdata,表示后端返回的数据,document.createElement()创建一个a标签,link.href设置下载链接,link.setAttribute()设置下载文件名,最后将a标签添加到页面中并使用link.click()触发下载。
相关问题
// 导出Excel编辑 handleExportToExcel() { let param = { version: '1681517479352991745', format: 'xlsx' } exportProject(param).then(res => { this.downloadFile(res) this.$message({ message: '操作成功', type: 'success' }); }) }, downloadFile(data) { // const blob = new Blob([data], { type: 'application/octet-stream' }); // const url = window.URL.createObjectURL(blob); // const link = document.createElement('a'); // link.href = url; // link.setAttribute('download', 'filename.xlsx'); // document.body.appendChild(link); // link.click(); // document.body.removeChild(link); const blob = new Blob([data], { type: 'application/octet-stream' }); const url = window.URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.setAttribute('download', 'filename.xlsx'); link.style.display = 'none'; document.body.appendChild(link); link.click(); // 等待下载完成后,移除创建的链接 setTimeout(() => { document.body.removeChild(link); window.URL.revokeObjectURL(url); }, 1000); },没有弹出保存框
如果在调用 `downloadFile()` 方法时没有弹出保存框,可能是因为浏览器的安全策略阻止了自动下载。为了解决这个问题,您可以尝试以下方法:
1. 添加 `target="_blank"` 属性:在创建 `<a>` 元素时,将 `target` 属性设置为 "_blank",这将在新的浏览器标签页中打开下载链接。这可能会绕过浏览器的弹出窗口阻止策略。
```javascript
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'filename.xlsx');
link.setAttribute('target', '_blank');
```
2. 手动提示用户保存文件:而不是自动下载文件,您可以改为手动提示用户保存文件。可以使用 `window.open()` 方法来打开下载链接,并在新标签页中显示文件内容。然后,用户可以手动选择保存文件。
```javascript
const link = document.createElement('a');
link.href = url;
link.style.display = 'none';
document.body.appendChild(link);
window.open(url, '_blank');
```
这样做将打开一个新的浏览器标签页,并显示文件内容。用户可以手动选择在该标签页上点击保存按钮。
请尝试以上方法,并根据您的实际情况选择适合您的解决方案。希望能帮到您!
async handleDownload(row) { try { const res = await this.$api.downloadFileById(row.id); if (res.status === 200) { const fileUrl = window.URL.createObjectURL(new Blob([res.data])); const link = document.createElement('a');//创建a标签 link.style.display = 'none'; //将a标签隐藏 link.href = fileUrl; link.setAttribute('download','' ); link.target = '_blank'; link.click(); } else { console.log('Something went wrong'); } } catch (error) { console.error('Error occurred while downloading file:', error); } },这段代码中,responseType:'blob这行代码写哪
在你调用`this.$api.downloadFileById(row.id)`时,应该把`responseType: 'blob'`作为配置项传入。例如:
```
const res = await this.$api.downloadFileById(row.id, { responseType: 'blob' });
```
这样可以确保返回的响应数据是一个 Blob 对象。
阅读全文