c# - 在 Web API 中设置 ZipArchive Zip 文件的名称
问题描述
我似乎无法从HttpResponseMessage
. 我可以使用 ZipArchive 及其所有内容文件成功创建 zip 文件,但是从客户端下载它时(尽管它确实返回并成功打开),名称以 16 字节十六进制格式显示,如 guid。我想为我的 zip 文件设置一个自定义名称。我应该在哪里做这个?
设置ContentDisposition
不起作用:
responseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = attachmentName
};
从使用 Angular2+ 的客户端,我将文件作为 blob 返回:
DownloadAtachment(url: string): Observable<Blob> {
const requestHeaders = new Headers(
{
'Content-Type', 'application/json',
'Accept', 'application/zip'
},
);
let options = new RequestOptions({ headers: requestHeaders });
let args: RequestOptionsArgs = {headers: options, withCredentials:false, responseType: ResponseContentType.ArrayBuffer};
return this._http.get(url, args)
.map(response => {
return new Blob([response.blob()], { type: 'application/zip'});
});
}
解决方案
我仍然不完全确定为什么不使用 HttpResponseMessage 标头,但我只是使用了不同的方式来处理响应。因此,不要使用以下命令打开 blob:
const fileurl = URL.createObjectURL(res);
window.open(fileurl, '_self');
我使用 a@ViewChild
访问不可见的锚标记来处理单击并设置附件名称:
const fileurl = URL.createObjectURL(res);
const link = this.zipClick.nativeElement as HTMLAnchorElement;
link.href = fileurl;
link.donwload = "Name.zip";
link.click();
window.URL.revokeObjectURL(fileurl);
推荐阅读
- regex - 正则表达式检查特定电话号码或分机
- verilog - Verilog 中的 Inter & Intra Delay 与 Blocking & NBA 的混淆
- angular-material - 数据表不显示我的数据源数组
- c - C 程序预先添加,什么时候应该添加
- azure - 如何通过我拥有的 Graph API 从 Azure 获取所有组?
- python - Python使用哪种算法作为索引方法?
- javascript - 使用 for 循环增量打印数组项
- python - 如何在 Python 中为 QTableWidget 设置大小提示
- javascript - 在 JS Web 扩展中创建图表
- r - 如何用ggplot2缩放第二个轴,第二个轴有负值