Asp Core通过Web Api提供文件

时间:2018-01-21 11:37:11

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

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

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

filedownload.component.html

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

filedownload.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); }
     );
}

在我的网络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,一旦实现多个文件的归档和压缩,文件可能会更大。

2 个答案:

答案 0 :(得分:2)

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

public interface ProjectRepository extends MongoRepository<Project, String> {

    @Query(value = "{'texts.key': ?0 }", fields = "{ 'texts.key' : 1, 'texts.defaultText': 1 }")
    Project findByKey(String key);   
}

答案 1 :(得分:1)

使用流更明智:

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

    return File(stream, "application/octet-stream", "YourFileName.extension");
}