download.js 1.0KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /**
  2. * 获取 query string
  3. * @param {*} params
  4. * @returns string
  5. */
  6. function getQueryString(params) {
  7. if (!params) return ;
  8. const keys = Object.keys(params)
  9. const arr = keys.map((key) => {
  10. const val = params[key]
  11. if (val === null || val === undefined) return false;
  12. return `${key}=${encodeURIComponent(val)}`
  13. })
  14. // eslint-disable-next-line consistent-return
  15. return arr.filter(Boolean).join('&')
  16. }
  17. export function fetchBlob(url, opt) {
  18. const { params, ...initArgs } = opt || {}
  19. const resource = params ? `${url}?${getQueryString(params)}` : url
  20. return window.fetch(resource, initArgs).then(response => response.blob())
  21. }
  22. export function downloadBlob(fileName, blob) {
  23. const url = window.URL.createObjectURL(blob);
  24. const link = document.createElement('a');
  25. link.href = url;
  26. link.setAttribute('download', fileName);
  27. link.click();
  28. window.URL.revokeObjectURL(url);
  29. }
  30. export function downloadUrl(fileName, url, opt) {
  31. return fetchBlob(url, opt).then(blob => downloadBlob(fileName, blob))
  32. };