我正在从WebAPI
控制器返回一个文件。Content-Disposition
头值是自动填充的,它也包含了我的文件名。
我的后端代码如下所示:
[HttpGet("Download")]
public async Task<ActionResult> Download([FromQuery]CompanySearchObject req)
{
string fileName = "SomeFileName_" + DateTime.UtcNow.Date.ToShortDateString() + ".csv";
var result = await _myService.GetData(req);
Stream stream = new System.IO.MemoryStream(result);
return File(stream, "text/csv", fileName.ToString());
}
在我的前端
exportData(params).then(response => {
console.log(response);
console.log('Response Headers:', response.headers);
const type = response.headers['content-type'];
const blob = new Blob([response.data], { type: type, encoding: 'UTF-8' });
//const filename = response.headers['content-disposition'].split('"')[1];
//alert(filename);
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = 'file.xlsx';
link.click();
link.remove();
});
};
但我很难获取此数据,因为当我在前端执行console.log时,我看不到此..正如您所看到的,我记录了响应console.log('Response Headers:', response.headers);
,但我只看到:
这个数据不应该在某个地方吗?我想知道如何从Content-Disposition
中读取值并获得文件名?
谢谢伙计们干杯
4条答案
按热度按时间0sgqnhkj1#
有同样的问题。我的问题是CORS。如果你正在使用它,你需要在你的配置中这样暴露它:
ujv3wf0j2#
我这样做的方法是循环遍历所有的请求头,直到我匹配我正在寻找的特定头。
在上面的示例代码中,我正在查找'Username','Password'和'APIKey'。它们作为
ref
参数传递,因此如果在此方法中设置了它们,则在调用此GetSetCustomHeaders
方法的方法中也会设置它们,因为它引用了相同的内容。因此,当我最初调用此方法时,我的变量设置为string.Empty
。希望这是有帮助的。
2uluyalo3#
对于获取响应头,它返回的是一个可迭代对象,您必须循环通过
response.headers
而不是log response.headers object
。请尝试以下代码:
bf1o4zei4#
这是正确的,我面临这个问题,试试看。
它只能在服务器端(后端)解析。您必须添加后端响应标头,如下所示,
访问控制暴露接头:[内容-处置,.....可以添加多个标题]
之后,您可以使用response. header直接访问这个头文件