【问题标题】:Asp Core serve file via Web ApiAsp Core 通过 Web Api 提供文件
【发布时间】:2018-06-30 04:24:46
【问题描述】:

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

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

文件下载.component.html

<button (click)="downloadFile(document)">Download</button>

文件下载.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); }
     );
}

在我的 web 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();
}

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

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

现阶段文件大小从 100kb 到 50mb 不等,一旦我实施多个文件的归档和压缩,文件可以更大。

【问题讨论】:

    标签: asp.net angular asp.net-core asp.net-core-2.0


    【解决方案1】:

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

    [HttpGet("{id}")]
    public IActionResult Get(Guid id)
    {
        var bytes = System.IO.File.ReadAllBytes(@"YourFilePAth");
    
        return File(bytes, "application/octet-stream", "YourFileName.extension");
    }
    

    【讨论】:

    • 这对大文件会有什么影响?因为有些文件的大小在 100kb 到 50mb 之间?
    • @Aeseir 我已经在本地测试了超过 100MB 的文件没有问题,但我认为这可能取决于您的服务器设置。
    • 很好,我进一步简化了它以使其正常工作。
    【解决方案2】:

    使用流更明智:

    [HttpGet("{id}")]
    public IActionResult Get(Guid id)
    {
        var stream = System.IO.File.OpenRead(@"YourFilePAth");
    
        return File(stream, "application/octet-stream", "YourFileName.extension");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多