因此,我有一个调用服务的控制器。该服务从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服务器。当我设置断点时,我还可以看到它击中了每个返回行,但是没有下载开始。我没有收到任何错误或任何提示,因此很难弄清发生了什么。
答案 0 :(得分:1)
我知道您正在通过AJAX触发此请求。但是,您无法通过AJAX下载文件。返回的文件数据将成为JavaScript变量,而不是用户磁盘上的文件。
如果您需要通过脚本触发下载,请使用./node_modules/core-js/modules/es6.regexp.exec.js 1:3
或ERROR 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。或者当然,您可以采用任何其他方法,例如,供用户单击链接或供他们提交的表单