我需要下载文件名作为响应头的文件

时间:2019-07-29 11:20:08

标签: angular

need to download excel file by using fileName with response header
e.g: Content-Disposition: attachment; filename=InwardPackingList_BTD_1151.xlsx; filename*=UTF-8''InwardPackingList_BTD_1151.xlsx

i tried few methods but nothing will works

upload(files, data) {
    this.fileData = <File>files;
    this.packingList.uploadExcel(this.fileData).subscribe(res => {
      console.log("upload Excel", res)
      const arr = Object.keys(res)[0]
      this.packingList.updatePackingListExcel(data.inwardPackingListId, arr).subscribe(res => {
        const fileName = getFileNameFromResponseContentDisposition(res);
        console.log("fileName", fileName)
        saveFile(res.blob(), fileName);
      });
})
}

这是我以前打电话给我的服务      updatePackingListExcel(id,file):可观察{             返回this.http.get(baseUrl +'api / purchase / pd / price / update?pdId ='+ id +'&file ='+文件,{                 标头:新的HttpHeaders({                     'Content-Type':'application / json',                     “授权”:'Bearer'+ localStorage.getItem('token'),                 })             })         }

//Separate file 

import * as FileSaver from 'file-saver';
import { saveAs } from 'file-saver';
/**
 * Saves a file by opening file-save-as dialog in the browser
 * using file-save library.
 * @param blobContent file content as a Blob
 * @param fileName name file should be saved as
 */
export const saveFile = (blobContent: Blob, fileName: string) => {
    const blob = new Blob([blobContent], { type: 'application/octet-stream' });
    saveAs(blob, fileName);
};

/**
 * Derives file name from the http response
 * by looking inside content-disposition
 * @param res http Response
 */
export const getFileNameFromResponseContentDisposition = (res:Response) => {
    const contentDisposition = res.headers.get('content-disposition') || '';
    const matches = /filename=([^;]+)/ig.exec(contentDisposition);
    const fileName = (matches[1] || 'untitled').trim();
    return fileName;
};

0 个答案:

没有答案