由于response.body未定义,下面的Angular代码导出一个空的csv文件
import { Injectable } from '@angular/core';
import { HttpClient, HttpParams, HttpHeaders, HttpResponse } from '@angular/common/http';
import { saveAs } from 'file-saver';
@Injectable({
providedIn: 'root'
})
export class FileDownloadService {
constructor(private http: HttpClient) { }
download_adhoc_report(endpoint, params, url, report_name = 'data.csv') {
const httpOptions = {
responseType: 'arraybuffer' as 'json',
headers: new HttpHeaders({
'Content-Type': 'application/json'
}),
params: new HttpParams()
};
if (params) {
httpOptions.params = new HttpParams();
for (let k in params) {
httpOptions.params = httpOptions.params.set(k, params[k]);
}
}
// ISSUE COMES HERE
this.http.get(url + endpoint, httpOptions).subscribe((response: HttpResponse<ArrayBuffer>) => {
const blob = new Blob([response.body], { type: 'text/csv' }); //HERE response.body is UNDEFINED
saveAs(blob, report_name);
}, error => {
console.error('File download failed:', error);
});
}
}
console.log(response)返回:
服务器端代码:
import azure.functions as func
from ..shared import blobOps
def main(req: func.HttpRequest) -> func.HttpResponse:
report_path = req.params.get('output_filePath') + req.params.get('output_fileName')
try:
with open(req.params["LOCALFILENAME"], "r") as my_blob2:
file = my_blob2.read()
headers = {
"Content-Disposition": "attachment; filename=data.csv",
"Content-Type": "text/csv"
}
return func.HttpResponse(file, headers=headers, status_code=200)
except Exception as e:
print(e)
return func.HttpResponse("Error : File not found", status_code=404)
来自服务器的响应不是空的(并且似乎包含所需的数据),所以我的猜测是问题在于响应类型或读取的方式。
将非常感谢任何关于如何解决这个问题的提示。
1条答案
按热度按时间shyt4zoc1#
要将文件下载为csv,我将使用以下工作:
downloadFile方法将创建一个带有下载链接的标记元素,该链接是使用createObjectURL方法创建的,并在其上模拟一个单击事件