HttpRequest文件下载将下载不带扩展名的文件

时间:2019-04-02 12:13:23

标签: angular

我仍然对Angular还是陌生的,我们有一个与下载文件有关的错误-其中一个页面上有一个网格,其中包含文件,单击这些文件可以将其下载到PC。但是,当文件下载异常时,如下所示:

enter image description here

我不知道这是哪种格式。例如,我上载一个.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;
        }

2 个答案:

答案 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)
            )