当前位置:   article > 正文

前端实现下载、导出_js创建a标签下载文件

js创建a标签下载文件
  • js创建a标签实现下载url 
  1. // js创建a标签实现下载
  2. export const downloadUtils = (url) => {
  3. if (!url) {
  4. return ElMessage.info({
  5. message: '无可下载文件',
  6. type: 'info'
  7. })
  8. }
  9. console.log('下载')
  10. let a = document.createElement('a')
  11. let event = new MouseEvent('click')
  12. a.download = ''
  13. a.href = url
  14. a.dispatchEvent(event)
  15. ElMessage.success({
  16. message: '下载成功',
  17. type: 'success'
  18. })
  19. }
  • js 根据url 下载图片
  1. // 下载图片地址和图片名
  2. export const downloadIamge = (imgsrc, name) => {
  3. let image = new Image()
  4. // 解决跨域 Canvas 污染问题
  5. image.setAttribute('crossOrigin', 'anonymous')
  6. image.onload = function () {
  7. let canvas = document.createElement('canvas')
  8. canvas.width = image.width
  9. canvas.height = image.height
  10. let context = canvas.getContext('2d')
  11. context.drawImage(image, 0, 0, image.width, image.height)
  12. let url = canvas.toDataURL('image/png') // 得到图片的base64编码数据
  13. let a = document.createElement('a') // 生成一个a元素
  14. let event = new MouseEvent('click') // 创建一个单击事件
  15. a.download = name || 'photo' // 设置图片名称
  16. a.href = url // 将生成的URL设置为a.href属性
  17. a.dispatchEvent(event) // 触发a的单击事件
  18. }
  19. image.src = imgsrc
  20. }
  • 后端返回二进制流文件下载
  1. /**
  2. * 导出数据(兼容ie浏览器)
  3. * @param {string, string} fileName
  4. */
  5. export function exportSearchList (dowLoadFileName, result) {
  6. const blob = new Blob([result])
  7. const fileName = dowLoadFileName + '.xls'
  8. // 判断浏览器
  9. var brower = ''
  10. if (navigator.userAgent.indexOf('Edge') > -1) {
  11. brower = 'Edge'
  12. }
  13. if ('download' in document.createElement('a')) {
  14. // 非IE下载
  15. if (brower === 'Edge') {
  16. navigator.msSaveBlob(blob, fileName)
  17. return
  18. }
  19. const elink = document.createElement('a')
  20. elink.download = fileName
  21. elink.style.display = 'none'
  22. elink.href = URL.createObjectURL(blob)
  23. document.body.appendChild(elink)
  24. elink.click()
  25. URL.revokeObjectURL(elink.href)
  26. // 释放URL 对象
  27. document.body.removeChild(elink)
  28. } else {
  29. // IE10+下载
  30. navigator.msSaveBlob(blob, fileName)
  31. }
  32. }
  • 前端导出excel文件并下载
  1. import XLSX from 'xlsx'
  2. /**
  3. * 前端导出数据
  4. * @param {Array, Array, String}
  5. */
  6. export function outputFile (data, header, name) {
  7. const ws = XLSX.utils.json_to_sheet(data, header)
  8. const wb = XLSX.utils.book_new()
  9. XLSX.utils.book_append_sheet(wb, ws, name)
  10. XLSX.writeFile(wb, name + '.xlsx')
  11. }
  12. // 提取相对应字段的数据
  13. export function formatJson (filterVal, jsonData) {
  14. return jsonData.map(v => filterVal.map(j => v[j]))
  15. }
  16. /**
  17. * 前端导出数据
  18. * @param {Array Array, Array, String}
  19. * 与上面的区别是直接用抽离table组件的入参拿到header和filterVal 不需要导出方法里拼对象
  20. */
  21. export function exportExcel (data, filterVal, header, name) {
  22. const list = formatJson(filterVal, data)
  23. list.unshift(header)
  24. const ws = XLSX.utils.aoa_to_sheet(list)
  25. const wb = XLSX.utils.book_new()
  26. XLSX.utils.book_append_sheet(wb, ws, name)
  27. XLSX.writeFile(wb, `${name}.xlsx`)
  28. }
  1. // 导出
  2. const handleExport = async () => {
  3. let { pageNum, pageSize, startTime, endTime, operateType, companyAccountId } = orderParam
  4. let params = {
  5. pageNum,
  6. pageSize,
  7. startTime,
  8. endTime,
  9. operateType,
  10. companyAccountId,
  11. queryAll: true
  12. }
  13. let { code, message, result } = await queryFirstCompanyAccountLog(params)
  14. if (code !== 200) return proxy.$message({ message, type: 'info' })
  15. if (!result || result.length === 0) return proxy.$message({ message: '无可导出的数据', type: 'info' })
  16. const header = ['交易时间', '公司编码', '公司简称', '公司全称', '能源账户类型', '收支金额', '账户总余额', '交易类型', '订单号', '备注', '签约主体']
  17. const newData = []
  18. result.forEach(item => {
  19. newData.push({
  20. 交易时间: item.createTime,
  21. 公司编码: item.gasId,
  22. 公司简称: item.companyName,
  23. 公司全称: item.companyAllName,
  24. 能源账户类型: item.energyTypeDesc,
  25. 收支金额: item.amount,
  26. 账户总余额: item.balanceAmount,
  27. 交易类型: item.operateTypeDesc,
  28. 订单号: item.outOrderId,
  29. 备注: item.remark,
  30. 签约主体: item.signingBodyDesc
  31. })
  32. })
  33. outputFile(newData, header, `账户明细-${getLocalTime(new Date().getTime())}`)
  34. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/63586
推荐阅读
相关标签
  

闽ICP备14008679号