日常工作问题记录:
文件下载本来一开始想用a标签做,但是下载出来的文件乱码,后来查询发现是请求方式的错误,后台下载文件是post方式,而a标签默认是get方式。
后来在项目里找了找,发现前人有大佬做了相关的文件下载,代码如下,有一部分没懂应用场景,如果有大佬看到麻烦帮忙解答一下。
function downloadFile(url, method, params) {
let oForm = document.createElement('form')
// 给form附上属性
oForm.type = 'hidden';
oForm.action = url;
oForm.method = method;
// 下面这段代码应用场景我也不清楚,看到其他人这么写的,我记录下来,可能有多文件下载吧
if ((typeof params !== 'undefined') && (Object.keys(params).length > 0)) {
for (const key in params) {
let temInput = document.createElement('input')
temInput.name = key
temInput.value = params[key]
oForm.appendChild(temInput)
}
}
let rms = document.createElement('input')
rms.name = 'rms'
rms.value = 1
oForm.appendChild(rms)
document.body.appendChild(oForm)
oForm.submit()
}
在vue页面里,调用此方法:
import { downloadFile } from 'xxx.js'
在某个按钮上添加点击事件,调用此方法
<button @click='downloadPDF' />
methods:{ downloadPDF(){ let url = '/api/xxxx/xxx' // 也可能你不需要这个参数 let params = { xxx } let method = 'post' // 调用引入的封装好的方法 downloadFile(url , method , params) } }