尝试使用 angular 5 和 asp.net core 从数据库下载文件

除非

我正在尝试下载已通过 id 成功上传到数据库的文件。有谁知道需要做什么才能获得正确的结果?

我有一个 FileUpload 表,其中包含以下列(与文件相关):

Id = uniqueidentifier,
Content = varbinary,
ContentType = nvarchar, e.g. application/pdf
FileName = nvarchar, e.g. filename.pdf
FileType = tinyint 

这是控制器中的方法。

/// <summary>
/// Download the file from the database by id.
/// </summary>
/// <param name="id">The identifier.</param>
/// <returns>The file.</returns>
[HttpGet]
public async Task<ActionResult> GetDownloadFile(Guid id)
{
    if (id == null)
    {
        throw new UserFriendlyException("File not found.");
    }
    var file = await _fileUploadRepository.FirstOrDefaultAsync(id);
    var filename = file.FileName.ToString();
    var fileBytes = file.Content;
    return File(fileBytes, file.ContentType,file.FileName);
}

这是试图调用控制器的打字稿,但它不起作用(我只包含了相关代码):

constructor(
injector: Injector,
private _fileUploadsServiceProxy: FileUploadsServiceProxy,
private _notifyService: NotifyService,
private _tokenAuth: TokenAuthServiceProxy,
private _activatedRoute: ActivatedRoute,
private _fileDownloadService: FileDownloadService,
private _searchService: SearchService,
private http: Http
) {
super(injector);
}

/// <summary> 
/// Download the file from the database.
/// </summary>
///<param name="file">The file.</param>
downloadFile(file: any): void {
    if (file.fileUpload.id) {
        var headers = new Headers();
        headers.append('Content-Type', file.fileUpload.contentType);
        headers.append('Authorization', 'Bearer ' + abp.auth.getToken());

        this.http.get(`${AppConsts.remoteServiceBaseUrl}/FileUploadComponents/DownloadFile?id= ${file.fileUpload.id}`, {
            headers: headers,
            responseType: ResponseContentType.Blob
        })
            .subscribe(result => {
                saveAs(result.blob(), file.fileUpload.fileName);
                this.notify.success(`Downloaded ${file.fileUpload.fileName} successfully.`);
        });
    }
}
东区

您的 C# 代码似乎正确,但您的 TypeScript/Angular 代码不会调用GetDownloadFile您的 API操作。

http.get(...)方法返回一个 observable 并且只有在您订阅它时才会触发 HTTP 请求。

public downloadFile(id: number): void {
  var headers = new Headers();
  headers.append('Content-Type', 'application/octetstream');
  headers.append('Authorization', 'Bearer ' + abp.auth.getToken());

  this.http.get(`${AppConsts.remoteServiceBaseUrl}/FileUploadComponents/DownloadFile?id= ${id}`)
    .subscribe(result => {
      // result contains your file data.
    });
}

现在,您需要保存文件,您可以使用文件保护程序包。

在您的项目根目录(所在package.json的位置)中使用以下命令安装包

npm install file-saver --save

然后更新您的代码以导入并调用文件保护程序方法来保存您的文件。

import { saveAs } from 'file-saver';

public downloadFile(id: number): void {
  var headers = new Headers();
  headers.append('Content-Type', 'application/octetstream');
  headers.append('Authorization', 'Bearer ' + abp.auth.getToken());

  this.http.get(`${AppConsts.remoteServiceBaseUrl}/FileUploadComponents/DownloadFile?id= ${id}`).subscribe(result => {
    saveAs(result, 'fileName');
  });
}

希望能帮助到你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从 Angular 数据库中的 ASP.NET Core API 下载并保存 pdf 文件?

来自分类Dev

使用Blazor Webassembly和ASP.NET Core安全下载文件

来自分类Dev

我如何使用angular 5和asp.net core从angular向端点发送电子邮件

来自分类Dev

在ASP.NET MVC 5控制器中使用POST从dotnet Core Web API下载文件

来自分类Dev

使用angular.js,asp.net下载文件

来自分类常见问题

ASP.NET 5,.NET Core和ASP.NET Core 5有什么区别?

来自分类Dev

使用ASP.NET Core和MVC存储本地文件

来自分类Dev

使用.Net Core和Angular 8从数据库中获取图像(二进制数据)

来自分类Dev

ASP.Net根据sql数据库中保存的文件路径从文件夹下载文件

来自分类Dev

使用 angular cli 和 ASP.Net MVC5 集成 angular 4

来自分类Dev

ASP.NET:在网格视图上单击文件名时,从数据库下载文件

来自分类Dev

ASP.NET Core 2.x ,带有数据表的 Angular 4/5

来自分类Dev

在Angular 2和ASP.NET Core中使用相对图像路径

来自分类Dev

使用ASP.NET Core和Angular2的最佳方法

来自分类Dev

如何使用Angular和ASP.NET Core 3.1确认电子邮件

来自分类Dev

部署angular 8和asp.net core 3.1的步骤

来自分类Dev

ASP.net Core中的加密和Angular中的解密

来自分类Dev

Asp.net Core和Angular 7 Cors

来自分类Dev

Auth0、Angular 4 和 ASP.NET Core

来自分类Dev

从数据库流式传输数据-ASP.NET Core和SqlDataReader.GetStream()

来自分类Dev

尝试在EF7和ASP.NET5中使用DbSet <TEntity> .Where()

来自分类Dev

在 Asp.net MVC 3 项目中引用和使用 Angular 5+ 组件

来自分类Dev

ASP.Net Core-在SQL Server数据库中存储和检索FormCollection

来自分类Dev

通过Web Api和ASP.NET Core搜索数据库上的项目

来自分类Dev

ASP.Net Core 和 AngularJS:如何根据数据库记录动态路由/内容?

来自分类Dev

在asp net core实体框架mvc中从数据库绑定菜单和子菜单

来自分类Dev

ASP.NET Core 和 EF Core 1.1 - 使用存储过程显示数据

来自分类Dev

同一数据库上的 Asp.NET 和 Asp.NET Core Identity 模型

来自分类Dev

如何在ASP.NET Core MVC和Angular项目中使用Angular Material组件(特别是滑块)?

Related 相关文章

  1. 1

    如何从 Angular 数据库中的 ASP.NET Core API 下载并保存 pdf 文件?

  2. 2

    使用Blazor Webassembly和ASP.NET Core安全下载文件

  3. 3

    我如何使用angular 5和asp.net core从angular向端点发送电子邮件

  4. 4

    在ASP.NET MVC 5控制器中使用POST从dotnet Core Web API下载文件

  5. 5

    使用angular.js,asp.net下载文件

  6. 6

    ASP.NET 5,.NET Core和ASP.NET Core 5有什么区别?

  7. 7

    使用ASP.NET Core和MVC存储本地文件

  8. 8

    使用.Net Core和Angular 8从数据库中获取图像(二进制数据)

  9. 9

    ASP.Net根据sql数据库中保存的文件路径从文件夹下载文件

  10. 10

    使用 angular cli 和 ASP.Net MVC5 集成 angular 4

  11. 11

    ASP.NET:在网格视图上单击文件名时,从数据库下载文件

  12. 12

    ASP.NET Core 2.x ,带有数据表的 Angular 4/5

  13. 13

    在Angular 2和ASP.NET Core中使用相对图像路径

  14. 14

    使用ASP.NET Core和Angular2的最佳方法

  15. 15

    如何使用Angular和ASP.NET Core 3.1确认电子邮件

  16. 16

    部署angular 8和asp.net core 3.1的步骤

  17. 17

    ASP.net Core中的加密和Angular中的解密

  18. 18

    Asp.net Core和Angular 7 Cors

  19. 19

    Auth0、Angular 4 和 ASP.NET Core

  20. 20

    从数据库流式传输数据-ASP.NET Core和SqlDataReader.GetStream()

  21. 21

    尝试在EF7和ASP.NET5中使用DbSet <TEntity> .Where()

  22. 22

    在 Asp.net MVC 3 项目中引用和使用 Angular 5+ 组件

  23. 23

    ASP.Net Core-在SQL Server数据库中存储和检索FormCollection

  24. 24

    通过Web Api和ASP.NET Core搜索数据库上的项目

  25. 25

    ASP.Net Core 和 AngularJS:如何根据数据库记录动态路由/内容?

  26. 26

    在asp net core实体框架mvc中从数据库绑定菜单和子菜单

  27. 27

    ASP.NET Core 和 EF Core 1.1 - 使用存储过程显示数据

  28. 28

    同一数据库上的 Asp.NET 和 Asp.NET Core Identity 模型

  29. 29

    如何在ASP.NET Core MVC和Angular项目中使用Angular Material组件(特别是滑块)?

热门标签

归档