NET Core 2 |角2 |下载文件

时间:2018-02-22 13:04:33

标签: angular asp.net-core

我正在尝试使用angular 2net core 2作为API下载文件。

我以前看过的每个答案都有很大不同,我似乎无法理解/让他们工作。

无论如何,这就是我得到的服务器,我返回一个文件流

  var content = System.IO.File.ReadAllBytes(tempFilename);
  var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
  var fileName = "test.xlsx";

  return File(content, contentType, fileName);

流返回正常。现在我的理解是我必须在客户端上创建一个blob?然后阅读并保存blob或什么?

目前,在我的客户端,我有一个get请求返回一个observable。

以下是我的服务组件调用:

    this.reportService.generateDispensations(this.config).subscribe(data => {

    });

我不确定在实际的http调用中要修改什么,将其转换为blob或somethinng

2 个答案:

答案 0 :(得分:0)

快速修复,如果您的文件不需要身份验证,您可以这样做

const url = `${environment.apiUrl}/location/to/download/from`
window.location.href = url;

答案 1 :(得分:0)

  

假设您在某些文件夹名称(例如“ image”文件夹)中有数据文件   在wwwroot文件夹中。假设您在以下位置具有文件名abc.jpg   图片文件夹。要获取此文件,请将以下代码写入html   组件。

<a href="https://localhost:8438/image/abc.jpg" target="_blank" ><i class="fa fa-download"></i></a>
  

删除您的基本网址。

或者您可以在component.ts中使用以下方法,fileNameUrl是图像的完整URL。

DownLoadFilesUrl(fileNameUrl: any) {
        debugger;
        var filename: string[] = fileNameUrl.split('\\');
        this.getBlobFile(fileNameUrl).subscribe((data: Blob) => {
            debugger;
            let item = filename[filename.length - 1];

            let checkFileType = item.split('.').pop();
            var fileType: any;
            if (checkFileType == "txt") {
                fileType = "text/plain";
            }
            if (checkFileType == "pdf") {
                fileType = "application/pdf";
            }
            if (checkFileType == "doc") {
                fileType = "application/vnd.ms-word";
            }
            if (checkFileType == "docx") {
                fileType = "application/vnd.ms-word";
            }
            if (checkFileType == "xls") {
                fileType = "application/vnd.ms-excel";
            }
            if (checkFileType == "xlsx") {
                fileType = "application/vnd.ms-excel";
            }
            if (checkFileType == "png") {
                fileType = "image/png";
            }
            if (checkFileType == "jpg") {
                fileType = "image/jpeg";
            }
            if (checkFileType == "jpeg") {
                fileType = "image/jpeg";
            }
            if (checkFileType == "gif") {
                fileType = "image/gif";
            }
            if (checkFileType == "csv") {
                fileType = "text/csv";
            }
            if (checkFileType == "amr") {
                fileType = "AMR-WB";
            }
            var blob = new Blob([data], { type: fileType })
            const blob1: Blob = data;
            const fileName1: string = item;
            const objectUrl: string = URL.createObjectURL(blob);
            const a: HTMLAnchorElement = document.createElement('a') as HTMLAnchorElement;

            a.href = objectUrl;
            a.download = fileName1;
            document.body.appendChild(a);
            a.click();

            document.body.removeChild(a);
            URL.revokeObjectURL(objectUrl);

        });
    }



   getBlobFile(imageUrl: string): Observable<Blob> {
        return this._http.get(imageUrl, { responseType: 'blob' });
    }