我仍然对Angular还是陌生的,我们有一个与下载文件有关的错误-其中一个页面上有一个网格,其中包含文件,单击这些文件可以将其下载到PC。但是,当文件下载异常时,如下所示:
我不知道这是哪种格式。例如,我上载一个.pdf文件,当它下载类似的文件并尝试打开它时,Windows询问我要使用哪个程序打开它。这些文件不会损坏,因为我可以使用正确的程序打开它们,但是如果文件是PDF或TXT,我希望它完全像这样下载。我们使用相同的方法在主ASP.NET Web应用程序中保存和下载文件,并且所有文件都可以在该位置正常下载。
保存文档:
this.dataService
.saveItemAndGetId('api/documents-medicine/save', data)
.finally(() => {
this.loaderR = false;
this.addNewResolved.emit(true);
this.removeClickedElement();
})
.subscribe(
res => this.sharedService.handleSaveResponse(res > 0 ? true : false, this.localization.translate('documents'), '/app/documents/' + this.sharedService.globals.selectedResident.id),
err => this.sharedService.handleError(err)
);
文档下载:
this.dataService
.getFile('api/documents-medicine/' + data[1].id)
.subscribe(
res => window['saveAs'](res, data[1].fileName),
err => this.sharedService.handleError(err)
)
.getFile服务:
DocumentModel model = this.repository.getResidentSingleDocument(id);
if (model != null)
{
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(model.DocumentData);
return result;
}
return new HttpResponseMessage(HttpStatusCode.BadRequest);
存储库中的“ getResidentSingleDocument”方法:
try
{
return this.ctx.ResidentDocuments.Where(it => it.ID == Id)
.Select(it => new DocumentModel
{
Title = it.Titel,
DocumentData = it.ResidentDocument,
CreatedBy = it.CreatedBy
}).SingleOrDefault();
}
catch (Exception Ex)
{
throw Ex;
}
答案 0 :(得分:1)
文件名应在后端设置。
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "foo.txt"
};
此处的客户端解决方案: Is there any way to specify a suggested filename when using data: URI?
答案 1 :(得分:1)
您将必须从后端发送扩展。之后,您应该可以将扩展名作为字符串连接到您的文件名。如果您连接“ .pdf”,则应以有效格式下载。
this.dataService
.getFile('api/documents-medicine/' + data[1].id)
.subscribe(
res => window['saveAs'](res, data[1].fileName + '@here is the ext you got from backend@'),
err => this.sharedService.handleError(err)
)