Asp Core 通过 Web Api 提供文件

Aes*_*eir 1 asp.net asp.net-core asp.net-core-2.0 angular

我试图弄清楚如何将文件从我的 Web api 传输到我的 Angular 5 前端并下载它。

我的 Angular 5 前端很简单(我使用 FileSaver 包来帮助):

文件下载.component.html

<button (click)="downloadFile(document)">Download</button>
Run Code Online (Sandbox Code Playgroud)

文件下载.component.ts

downloadFile(document) {
    this.http.get("http://localhost:8080/"+document.id+).subscribe(
     data => {
          const dataFile = data;
          saveAs(dataFile, document.filename);
     },
     err => { console.info(err); }
     );
}
Run Code Online (Sandbox Code Playgroud)

在我的网络 API 上,我不知道如何构建响应。到目前为止我只有:

[HttpGet("{id}"]
public async Task<IActionResult> GetFile(Guid id) {
    var testFileInfo = _dbcontext.UploadedFile.GetById(id);
    var filePath = Path.Combine("C:\FileRepo", testFileInfo.Filename);

    // what do i do here? i got no clue

    throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)

我尝试过在网上尝试各种示例,但似乎没有任何效果。

这个想法是,Web API 可以将任何范围的文件返回到前端,具体取决于服务器上的内容。

此阶段文件大小范围从 100kb 到 50mb,一旦我实现多个文件的归档和压缩,文件可能会更大。

SBF*_*ies 5

如果您希望 API 返回一个文件,您可以使用以下简单的代码:

[HttpGet("{id}")]
public IActionResult Get(Guid id)
{
    var bytes = System.IO.File.ReadAllBytes(@"YourFilePAth");

    return File(bytes, "application/octet-stream", "YourFileName.extension");
}
Run Code Online (Sandbox Code Playgroud)