成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

(干貨)前端實現導出excel的功能

開發
導出功能其實在開發過程中是很常見的,平時我們做導出功能的時候基本都是后臺生成,我們直接只需要調一支接口后臺把生成的文件放到服務器或者數據庫mongodb中,如果是放到mongodb中的話,我們需要從mongodb中通過唯一生成的id去拿到文件,最后window.location.href就完事了。如果是放到服務器上,直接從服務器上下載就好了。下面我們使用另一種 H5 的新特性blob[1]對象來實現一下導出功能。

 什么是 Blob
Blob() 構造函數返回一個新的 Blob 對象。blob 的內容由參數數組中給出的值的串聯組成。

  1. var aBlob = new Blob( array, options ); 

兼容性

mimeType[2]
在 Blob 的構造函數中options參數的接受一個參數type,這個參數代表的是媒體類型,告訴瀏覽器是什么類型的文件,常見的有

  1. {".3gp",    "video/3gpp"}, 
  2. {".apk",    "application/vnd.android.package-archive"}, 
  3. {".asf",    "video/x-ms-asf"}, 
  4. {".avi",    "video/x-msvideo"}, 
  5. {".bin",    "application/octet-stream"}, 
  6. {".bmp",    "image/bmp"}, 
  7. {".c",  "text/plain"}, 
  8. {".class",  "application/octet-stream"}, 
  9. {".conf",   "text/plain"}, 
  10. {".cpp",    "text/plain"}, 
  11. {".doc",    "application/msword"}, 
  12. {".docx",   "application/vnd.openxmlformats-officedocument.wordprocessingml.document"}, 
  13. {".xls",    "application/vnd.ms-excel"}, 
  14. {".xlsx",   "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, 
  15. {".exe",    "application/octet-stream"}, 
  16. {".gif",    "image/gif"}, 
  17. {".gtar",   "application/x-gtar"}, 
  18. {".gz""application/x-gzip"}, 
  19. {".h",  "text/plain"}, 
  20. {".htm",    "text/html"}, 
  21. {".html",   "text/html"}, 
  22. {".jar",    "application/java-archive"}, 
  23. {".java",   "text/plain"}, 
  24. {".jpeg",   "image/jpeg"}, 
  25. {".jpg",    "image/jpeg"}, 
  26. {".js""application/x-javascript"}, 
  27. {".log",    "text/plain"}, 
  28. {".m3u",    "audio/x-mpegurl"}, 
  29. {".m4a",    "audio/mp4a-latm"}, 
  30. {".m4b",    "audio/mp4a-latm"}, 
  31. {".m4p",    "audio/mp4a-latm"}, 
  32. {".m4u",    "video/vnd.mpegurl"}, 
  33. {".m4v",    "video/x-m4v"}, 
  34. {".mov",    "video/quicktime"}, 
  35. {".mp2",    "audio/x-mpeg"}, 
  36. {".mp3",    "audio/x-mpeg"}, 
  37. {".mp4",    "video/mp4"}, 
  38. {".mpc",    "application/vnd.mpohun.certificate"}, 
  39. {".mpe",    "video/mpeg"}, 
  40. {".mpeg",   "video/mpeg"}, 
  41. {".mpg",    "video/mpeg"}, 
  42. {".mpg4",   "video/mp4"}, 
  43. {".mpga",   "audio/mpeg"}, 
  44. {".msg",    "application/vnd.ms-outlook"}, 
  45. {".ogg",    "audio/ogg"}, 
  46. {".pdf",    "application/pdf"}, 
  47. {".png",    "image/png"}, 
  48. {".pps",    "application/vnd.ms-powerpoint"}, 
  49. {".ppt",    "application/vnd.ms-powerpoint"}, 
  50. {".pptx",   "application/vnd.openxmlformats-officedocument.presentationml.presentation"}, 
  51. {".prop",   "text/plain"}, 
  52. {".rc""text/plain"}, 
  53. {".rmvb",   "audio/x-pn-realaudio"}, 
  54. {".rtf",    "application/rtf"}, 
  55. {".sh""text/plain"}, 
  56. {".tar",    "application/x-tar"}, 
  57. {".tgz",    "application/x-compressed"}, 
  58. {".txt",    "text/plain"}, 
  59. {".wav",    "audio/x-wav"}, 
  60. {".wma",    "audio/x-ms-wma"}, 
  61. {".wmv",    "audio/x-ms-wmv"}, 
  62. {".wps",    "application/vnd.ms-works"}, 
  63. {".xml",    "text/plain"}, 
  64. {".z",  "application/x-compress"}, 
  65. {".zip",    "application/x-zip-compressed"}, 
  66. {"",        "*/*"

導出
我們需要調取接口來獲取導出文件的內容,如果我們先后端分離的話,我們需要接口給我們返回Buffer, Blob, DOMString類型的數據,DOMStrings會被編碼為UTF-8。

  1. let blob = new Blob([接口返回的數據], { 
  2.     type: "application/vnd.ms-excel;charset=utf-8" 
  3. }); 

使用a標簽,模擬點擊a標簽完成導出功能,通過URL.createObjectURL()[3]方法創建一個下載的鏈接地址,最后在不需要的時候URL.revokeObjectURL釋放掉

  1. let downloadElement = document.createElement("a"); 
  2. let href = window.URL.createObjectURL(blob); //創建下載的鏈接 
  3. downloadElement.href = href; 
  4. document.body.appendChild(downloadElement); 
  5. downloadElement.click(); //點擊下載 
  6. document.body.removeChild(downloadElement); //下載完成移除元素 
  7. window.URL.revokeObjectURL(href); //釋放掉blob對象 

文件名的設置
文件名稱通過報文頭設置content-disposition屬性設置,Content-Disposition參數:

  1. attachment --- 作為附件下載 
  2. inline --- 在線打開 

  1. setHeader("Content-Disposition","inline; filename=文件名.mp3"); 
  2. setHeader("Content-Disposition","attachment;filename=test.xls"); 

前端通過截取報文頭里的content-disposition字段獲取文件名稱:

  1. downloadElement.download =decodeURI( 
  2.     res.headers["content-disposition"].split("filename=")[1] 
  3. ) || ""; //下載后文件名 

完整代碼
這里的res代表后臺返回的數據:

  1. config: {url: "/ExportExcel", method: "post", data: "", headers: {…}, baseURL: "/api/", …} 
  2. data: Blob {size: 5120, type: "application/vnd.ms-excel"
  3. headers: {connection"close", content-disposition: "attachment;filename=xxx.xls", content-encoding: "gzip", content-length: "1455", content-type: "application/vnd.ms-excel;charset=UTF-8", …} 
  4. request: XMLHttpRequest {readyState: 4, timeout: 30000, withCredentials: false, upload: XMLHttpRequestUpload, onreadystatechange: ƒ, …} 
  5. status: 200 
  6. statusText: "OK" 

前端代碼

  1. let blob = new Blob([res.data], { 
  2.     type: "application/vnd.ms-excel;charset=utf-8" 
  3. }); 
  4. let downloadElement = document.createElement("a"); 
  5. let href = window.URL.createObjectURL(blob); //創建下載的鏈接 
  6. downloadElement.href = href; 
  7. downloadElement.download = 
  8. decodeURI( 
  9.     res.headers["content-disposition"].split("filename=")[1] 
  10. ) || ""; //下載后文件名 
  11. document.body.appendChild(downloadElement); 
  12. downloadElement.click(); //點擊下載 
  13. document.body.removeChild(downloadElement); //下載完成移除元素 
  14. window.URL.revokeObjectURL(href); //釋放掉blob對象 

寫在最后
導出功能多種多樣,根據瀏覽器的不同和需求的不同會有不同的問題出現其中的坑還是比較多的,適合自己需求的才是最好的。

 

責任編輯:姜華 來源: 小丑的小屋
相關推薦

2023-02-03 08:21:30

excelMySQL

2023-02-25 10:04:21

JavaExcel導出功能

2020-12-02 11:56:16

Java注解Excel

2020-12-30 08:12:17

SQLExcel分列

2021-10-28 19:36:20

SQLExcel功能

2024-07-30 15:56:42

2024-06-17 12:25:49

2022-11-23 10:22:12

組件庫前端

2022-11-24 16:11:27

2025-04-07 03:22:00

Excel服務器oss

2022-12-01 17:46:53

網頁變灰功能前端

2020-05-14 14:57:48

MySQLExcel排序

2015-10-12 17:43:53

文件下載干貨

2025-02-05 09:39:00

2017-03-16 18:20:35

Windows 10Windows備份

2020-11-24 11:00:24

前端

2025-05-19 01:00:00

2021-03-26 07:09:15

Java技術pdfExcel

2025-05-06 01:00:00

Excel高性能內存

2023-11-02 10:14:50

TinykeysWeb應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜在线免费观看 | 99精品99久久久久久宅男 | 国产欧美视频一区二区三区 | 亚洲精品一 | 中文字幕久久精品 | 国产日韩亚洲欧美 | 综合国产第二页 | 成人免费高清 | 中文字幕日韩欧美一区二区三区 | 欧美一区不卡 | 亚洲午夜精品 | av网站免费在线观看 | 粉嫩国产精品一区二区在线观看 | 亚洲黄色一级 | 国产乱码精品一区二区三区忘忧草 | 91欧美精品成人综合在线观看 | 亚洲精品久久久久久国产精华液 | 欧美精品久久久久久 | 国产精品欧美一区二区 | 亚洲经典一区 | 欧美久久久电影 | 米奇狠狠鲁 | 亚洲精品电影网在线观看 | 国产精品成人一区二区 | 欧美成人综合 | 亚洲精品视频观看 | 中文字幕在线观看精品 | 国产男女视频网站 | 韩国毛片一区二区三区 | 久久国产精品偷 | 亚洲成人动漫在线观看 | 久久久久久久av | 91精品91久久久 | 99国内精品久久久久久久 | 国产精品久久久久久久久免费高清 | 国产精品日韩一区二区 | 国产目拍亚洲精品99久久精品 | 91麻豆精品国产91久久久更新资源速度超快 | 老牛影视av一区二区在线观看 | 日韩精品久久 | 欧产日产国产精品视频 |