Angular 2 CSV文件下载

前端之家收集整理的这篇文章主要介绍了Angular 2 CSV文件下载前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 springboot应用程序中有我的后端,从那里我返回一个.csv文件
@RequestMapping(value = "/downloadCSV")
        public void downloadCSV(HttpServletResponse response) throws IOException {
         String csvFileName = "books.csv";

            response.setContentType("text/csv");

            // creates mock data
            String headerKey = "Content-Disposition";
            String headerValue = String.format("attachment; filename=\"%s\"",csvFileName);
            response.setHeader(headerKey,headerValue);

            Book book1 = new Book("Effective Java","Java Best Practices","Joshua Bloch","Addision-Wesley","0321356683","05/08/2008",38);

            Book book2 = new Book("Head First Java","Java for Beginners","Kathy Sierra & Bert Bates","O'Reilly Media","02/09/2005",30);

            Book book3 = new Book("Thinking in Java","Java Core In-depth","Bruce Eckel","Prentice Hall","0131872486","02/26/2006",45);

            Book book4 = new Book("Java Generics and Collections","Comprehensive guide to generics and collections","Naftalin & Philip Wadler","0596527756","10/24/2006",27);

            List<Book> listBooks = Arrays.asList(book1,book2,book3,book4);

            // uses the Super CSV API to generate CSV data from the model data
            ICsvBeanWriter csvWriter = new CsvBeanWriter(response.getWriter(),CsvPreference.STANDARD_PREFERENCE);

            String[] header = { "Title","Description","Author","Publisher","isbn","PublishedDate","Price" };


            csvWriter.writeHeader(header);

            for (Book aBook : listBooks) {
                csvWriter.write(aBook,header);
            }

            csvWriter.close();
        }

When i am hitting the URL in browser csv file is getting downloaded.

现在我试图从我的角度2应用程序中点击此URL,代码是这样的:

零件:

exportCSV() {
            console.log('export csv called'); 
            this.csvservice.getCSVReport().subscribe(data => this.downloadFile(data)),//console.log(data),error => console.log('Error downloading the file.'),() => console.info('OK');

        }

  downloadFile(data: any) {
        let parsedResponse = data.text();
        let blob = new Blob([parsedResponse],{ type: 'text/csv' });
        let url = window.URL.createObjectURL(blob);
        window.open(url);
    }

服务:

getCSVReport() {       
        return this.http.get(this.config.importCSVApiUrl);
    }

我正在下载文件,但它像

Actually it should be Book.csv

请指导我缺少的东西.

有一种解决方法,但您需要创建一个< a>页面上的元素.调用revokeObjectURL清除内存:
downloadFile(data: any) {
    let parsedResponse = data.text();
    let blob = new Blob([parsedResponse],{ type: 'text/csv' });
    let url = window.URL.createObjectURL(blob);

    if(navigator.msSaveOrOpenBlob) {
        navigator.msSaveBlob(blob,'Book.csv');
    } else {
        let a = document.createElement('a');
        a.href = url;
        a.download = 'Book.csv';
        document.body.appendChild(a);
        a.click();        
        document.body.removeChild(a);
    }
    window.URL.revokeObjectURL(url);
}
原文链接:https://www.f2er.com/angularjs/141560.html

猜你在找的Angularjs相关文章