文件未从File或PhysicalFile下载IActionResult

时间:2019-04-19 19:19:57

标签: c# asp.net asp.net-mvc asp.net-core

因此,我有一个调用服务的控制器。该服务从FTP服务器下载文件,然后控制器应将文件返回给用户的浏览器以下载该文件,但这没有发生。下面的代码:

[HttpGet]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DownloadFileAsync(string file)
{
    // _ftpService.DownloadFileAsync(..) returns the downloaded files full physical path on the server: C:\Web\Images\file.jpg
    var downloadedFile = await _ftpService.DownloadFileAsync(file);

    // 1st attempt
    return PhysicalFile(downloadedFile, "image/jpeg", "file.jpg");

    // 2nd attempt
    using (var stream = new FileStream(downloadedFile, FileMode.Open))
    {
       return File(stream, "image/jpeg", "file.jpg");
    }

    // 3rd attempt
    byte[] fileBytes = System.IO.File.ReadAllBytes(downloadedFile);

    return File(fileBytes, "image/jpeg", "file.jpg");
}

VS中的输出窗口如下:

Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action method DisplayStandManagerWeb.Controllers.DevicesController.DownloadFileAsync (DisplayStandManagerWeb), returned result Microsoft.AspNetCore.Mvc.FileContentResult in 6924.1833ms.
Microsoft.AspNetCore.Mvc.Infrastructure.FileContentResultExecutor:Information: Executing Microsoft.AspNetCore.Mvc.FileContentResult, sending file with download name 'file.jpg' ...
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action DisplayStandManagerWeb.Controllers.DevicesController.DownloadFileAsync (DisplayStandManagerWeb) in 6936.9755ms
Microsoft.AspNetCore.Routing.EndpointMiddleware:Information: Executed endpoint 'DisplayStandManagerWeb.Controllers.DevicesController.DownloadFileAsync (DisplayStandManagerWeb)'

我100%确认文件存在。在第三次尝试中,fileBytes甚至填充了文件的字节,但浏览器未下载文件。

当我单击下载按钮时,什么也没有发生,但是我看到文件正在下载到Web服务器。当我设置断点时,我还可以看到它击中了每个返回行,但是没有下载开始。我没有收到任何错误或任何提示,因此很难弄清发生了什么。

1 个答案:

答案 0 :(得分:1)

我知道您正在通过AJAX触发此请求。但是,您无法通过AJAX下载文件。返回的文件数据将成为JavaScript变量,而不是用户磁盘上的文件。

如果您需要通过脚本触发下载,请使用./node_modules/core-js/modules/es6.regexp.exec.js 1:3ERROR in ./node_modules/core-js/modules/es6.regexp.exec.js 1:3 Module parse failed: Unexpected character ' ' (1:3) You may need an appropriate loader to handle this file type. (Source code omitted for this binary file) i 「wdm」: Failed to compile. 通过非ajax请求访问URL。或者当然,您可以采用任何其他方法,例如,供用户单击链接或供他们提交的表单