FileStreamResult上的性能降低

时间:2017-02-23 14:53:44

标签: asp.net asp.net-web-api asp.net-core

我正在尝试创建一个返回大文件400+ mb的API控制器操作。 现在我正在使用FileStreamResult作为IActionResult,这对于大约900mb的大文件来说非常慢,但是对4gb左右的文件起作用。

[HttpGet("{fileId}")]
    public async Task<IActionResult> DownloadFile(Guid fileId)
    {
        var fileResponse = await _bus.RequestAsync<FileRequest, FileResponse>(new FileRequest(fileId));
        var file = new FileInfo(@"c:\users\peter\desktop\save\" + fileId.ToString());
        return new FileStreamResult(file.OpenRead(), fileResponse.ContentType)
        {
            FileDownloadName = fileResponse.Filename
        };
    }

如果我首先将文件复制到内存流,它会快得多,但后来我受到了限制,它在4gb文件中失败了。

[HttpGet("{fileId}")]
    public async Task<IActionResult> DownloadFile(Guid fileId)
    {
        var fileResponse = await _bus.RequestAsync<FileRequest, FileResponse>(new FileRequest(fileId));
        var file = new FileInfo(@"c:\users\peter\desktop\save\" + fileId.ToString());
        var ms = new MemoryStream();
        file.OpenRead().CopyTo(ms);
        return new FileStreamResult(ms, fileResponse.ContentType)
        {
            FileDownloadName = fileResponse.Filename
        };
    }

如何通过MVC Api快速返回大文件?

0 个答案:

没有答案