Blame view

Yi.Vben5.Vue3/packages/effects/request/src/request-client/modules/downloader.ts 1.08 KB
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  import type { RequestClient } from '../request-client';
  import type { RequestClientConfig } from '../types';
  
  type DownloadRequestConfig = {
    /**
     * 定义期望获得的数据类型。
     * raw: 原始的AxiosResponse,包括headers、status等。
     * body: 只返回响应数据的BODY部分(Blob)
     */
    responseReturn?: 'body' | 'raw';
  } & Omit<RequestClientConfig, 'responseReturn'>;
  
  class FileDownloader {
    private client: RequestClient;
  
    constructor(client: RequestClient) {
      this.client = client;
    }
    /**
     * 下载文件
     * @param url 文件的完整链接
     * @param config 配置信息,可选。
     * @returns 如果config.responseReturn为'body',则返回Blob(默认),否则返回RequestResponse<Blob>
     */
    public async download<T = Blob>(
      url: string,
      config?: DownloadRequestConfig,
    ): Promise<T> {
      const finalConfig: DownloadRequestConfig = {
        responseReturn: 'body',
        ...config,
        responseType: 'blob',
      };
  
      const response = await this.client.get<T>(url, finalConfig);
  
      return response;
    }
  }
  
  export { FileDownloader };