53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
|  | import { message } from "antd"; | ||
|  | import dayjs from "dayjs"; | ||
|  | import { getFileUrl } from "../../utils/index.js"; | ||
|  | 
 | ||
|  | /** | ||
|  |  * 下载Blob流文件 | ||
|  |  */ | ||
|  | export default function useDownloadBlob( | ||
|  |   url, | ||
|  |   options = { name: "", type: "", params: {} }, | ||
|  | ) { | ||
|  |   const fileUrl = getFileUrl(); | ||
|  |   return new Promise((resolve, reject) => { | ||
|  |     const finalUrl = !url.includes(fileUrl) ? fileUrl + url : url; | ||
|  |     Object.entries(options.params).forEach(([key, value]) => { | ||
|  |       finalUrl.searchParams.append(key, value); | ||
|  |     }); | ||
|  |     fetch(finalUrl, { | ||
|  |       method: "GET", | ||
|  |       mode: "cors", | ||
|  |       headers: { | ||
|  |         "Content-Type": "application/json", | ||
|  |       }, | ||
|  |     }) | ||
|  |       .then((response) => { | ||
|  |         if (!response.ok) { | ||
|  |           throw new Error("Network response was not ok"); | ||
|  |         } | ||
|  |         return response.blob(); | ||
|  |       }) | ||
|  |       .then((blob) => { | ||
|  |         const finalBlob = new Blob([blob], { | ||
|  |           type: options.type || "application/vnd.ms-excel", | ||
|  |         }); | ||
|  |         const downloadElement = document.createElement("a"); | ||
|  |         const href = window.URL.createObjectURL(finalBlob); | ||
|  |         downloadElement.style.display = "none"; | ||
|  |         downloadElement.href = href; | ||
|  |         downloadElement.download | ||
|  |           = options.name || dayjs().format("YYYY-MM-DD HH:mm:ss"); | ||
|  |         document.body.appendChild(downloadElement); | ||
|  |         downloadElement.click(); | ||
|  |         document.body.removeChild(downloadElement); | ||
|  |         window.URL.revokeObjectURL(href); | ||
|  |         resolve({ data: finalBlob }); | ||
|  |       }) | ||
|  |       .catch((err) => { | ||
|  |         message.error("导出失败"); | ||
|  |         reject(err); | ||
|  |       }); | ||
|  |   }); | ||
|  | } |