【发布时间】:2023-02-03 22:07:50
【问题描述】:
我要疯了,我是个新手。我有两个控制器,一个来自服务器端,另一个由 jquery ajax 客户端调用。我在服务器端有一个包含 excel 文件的文件夹。我正在尝试从服务器端获取此文件夹并从客户端下载到用户的下载文件夹或使用任何另存为对话框。 这是我的服务器端控制器
[HttpGet]
[Route("DownloadExcelFile")]
public IActionResult DownloadExcelFile(string fileName)
{
try
{
return File(
fileContents: _wholesaleService.DownloadExcelFile(fileName),
contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
fileDownloadName: fileName
);
}
catch (Exception ex)
{
return default;
}
}
我的 fileContents 是一个字节数组,如下所示
public byte[] DownloadExcelFile(string fileName)
{
string sourcePath = GetFolderPath() + fileName;
var bytes = File.ReadAllBytesAsync(sourcePath);
return bytes.Result;
}
所以这是我的服务器端。我的客户端控制器是
[HttpGet]
public async Task<IActionResult> DownloadFile(string fileName)
{
var response = await _httpHelper.GetFormDataAsync<IActionResult>($"WholesaleManagement/DownloadExcelFile?filename={fileName}");
return StatusCode(200,response);
}
该控制器由 ajax 调用触发,它直接转到具有 httphelper 类的服务器端控制器,如下所示
public async Task<HttpResponseMessage> GetFormDataAsync<T>(string methodName, HttpStatusCode successStatusCode = HttpStatusCode.OK) where T : class
{
if (!urlWhiteList.Contains(methodName))
throw new HttpRequestException(methodName);
using (HttpClient httpClient = new HttpClient ())
{
var requestUri = QueryHelpers.AddQueryString(methodName, "", "");
var response = await httpClient.GetAsync(requestUri);
return response;
}
}
毕竟我的用例是:用户将从网站单击文件名,我将该文件名带到我的控制器并使用弹出窗口将该文件下载到用户的计算机。我希望它很清楚,如果你愿意,我可以提供更多细节。如何做到这一点?
【问题讨论】: