gpt4 book ai didi

excel - 如何在 Angular 4 中下载 excel/Zip 文件

转载 作者:太空狗 更新时间:2023-10-29 17:32:01 30 4
gpt4 key购买 nike

我使用 angular 4 作为前端,使用 lumen 5.4 作为后端。

我的要求是将一些数据导出为 excel 和 zip 文件。

使用 import { saveAs } from 'file-saver/FileSaver'; package 下载文件。

Angular 4 代码:

downloadExcel() {

const type = 'application/vnd.ms-excel';
const headers = { headers: new Headers({ 'Accept': type }) };
const filename = 'file.xls';

this.http.get('http://10.2.2.109/Download/exportExcel', headers)
.toPromise()
.then(response => this.saveToFileSystem(response, type, filename));

return false;


}



private saveToFileSystem(response, __type, filename) {
const contentDispositionHeader: string = response.headers.get('Content-Disposition');

if (contentDispositionHeader !== null) {
const parts: string[] = contentDispositionHeader.split(';');
//const filename = parts[1].split('=')[1];
const blob = new Blob([response._body], { type: __type });
saveAs(blob, filename);
} else {
alert('Cant download.....');
// handling download condition if content disposition is empty
const blob = new Blob([response._body], { type: __type });
saveAs(blob, filename);
}


}

流明代码

public function exportExcel(Request $request) {
$file = storage_path();
$file_name = 'book1.xls';
$headers = [
'Content-type' => 'application/vnd.ms-excel',
'Content-Disposition' => 'attachment;filename="' . $file_name,
'X-Filename' => $file_name,
'Content-Transfer-Encoding' => 'binary',
'Content-Length' => filesize($file . '/' . $file_name),
'Cache-Control' => 'max-age=0',
'Cache-Control' => 'max-age=1',
'Expires' => 'Mon, 26 Jul 1997 05:00:00 GMT',
'Last-Modified' => gmdate('D, d M Y H:i:s') . ' GMT',
'Cache-Control' => 'cache, must-revalidate',
'Pragma' => 'public',
'Set-Cookie' => 'fileDownload=true; path=/',
'Access-Control-Expose-Headers' => 'Content-Length,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma'
];

return response()->download($file . '/' . $file_name, $file_name, $headers);
}

问题

  1. const contentDispositionHeader: string = response.headers.get('Content-Disposition'); 似乎总是空的。
  2. 我们无法打开下载的文件,显示已损坏的消息。
  3. 它适用于文本文件下载

请帮我解决这个问题。或者为 Angular 指定任何其他工作代码//包

最佳答案

试试这个:

downloadExcel() {

const type = 'application/vnd.ms-excel';
const filename = 'file.xls';
const options = new RequestOptions({
responseType: ResponseContentType.Blob,
headers: new Headers({ 'Accept': type })
});

this.http.get('http://10.2.2.109/Download/exportExcel', options)
.catch(errorResponse => Observable.throw(errorResponse.json()))
.map((response) => {
if (response instanceof Response) {
return response.blob();
}
return response;
})
.subscribe(data => saveAs(data, filename),
error => console.log(error)); // implement your error handling here

}

关键点是 RequestOptions 上的 responseType: ResponseContentType.Blob 和返回响应时的​​ response.blob()

一般来说,不建议像这样访问响应的_body属性:response._body,而是应该调用相关的方法来获取body基于其类型的内容(如 response.blob()response.json() 等)

关于excel - 如何在 Angular 4 中下载 excel/Zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46153118/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com