在 dotnet core 2.0 和 angular 2+ 中访问当前用户的下载文件夹
Accessing current users's download folder in dotnet core 2.0 and angular 2+
我是一名新开发人员,目前正在学习 dotnet 核心 angular 技术。
我有一个 dotnet 核心项目,允许我使用 EPPlus.Core
库将 SQL table 下载为 excel 文件。当我测试下面的代码时,它工作正常。我可以从我的下载文件夹中获取 excel 文件。但是,当我将它发布到 IIS 时,代码工作正常但 Downloads 文件夹中没有文件。
当我调试它时,我意识到前端(在我的例子中,它是 angular)无法访问我的下载文件夹,即使我在我的控制器中明确声明也是如此。这是我的控制器代码,它允许我导出为 excel 文件。
[HttpGet]
[Route("ExportParticipants")]
public string ExportParticipants()
{
string rootFolder = System.Convert.ToString(
Microsoft.Win32.Registry.GetValue(
@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
,"{374DE290-123F-4565-9164-39C4925E467B}"
,String.Empty));
var list = DateTime.Now.ToString("yyyy-MM-dd-HH-mmss");
string fileName = @"Export_Participants_" + list + "_.xlsx";
FileInfo file = new FileInfo(Path.Combine(rootFolder, fileName));
using (ExcelPackage package = new ExcelPackage(file))
{
IList<Participant> participantList = context.Participants.ToList();
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Participants");
int totalRows = participantList.Count();
worksheet.Cells[1, 1].Value = "#";
worksheet.Cells[1, 2].Value = "FirstName";
worksheet.Cells[1, 3].Value = "Last Name";
int i = 0;
for (int row = 2; row <= totalRows + 1; row++)
{
worksheet.Cells[row, 1].Value = i+1;
worksheet.Cells[row, 2].Value = participantList[i].FirstName;
worksheet.Cells[row, 3].Value = participantList[i].LastName;
i++;
}
package.Save();
}
return " Participant list has been exported successfully";
}
上面的代码在我用邮递员测试时工作正常。但是,当我发布它时,它不起作用。我没有收到任何错误。但我发现问题是rootFolder
。所以我尝试了以下代码:
string rootFolder = Environment.GetEnvironmentVariable("USERPROFILE") + @"\" + "Downloads";
我什至尝试了 Ray Koopa's article in Code Project 但我在下载文件夹中什么也没有。
如何将这个导出的 excel 文件放到当前用户的下载文件夹中?请注意,我使用 windows。
或者我应该在前端执行此操作?我应该寻找一个 npm 包并在前端使用它吗?如果有,你推荐给我哪个套餐?
谢谢大家的帮助!
这将下载服务器下载文件夹中的 excel 文件。我将不使用 MemoryStream
,而是使用前端库。由于我有 JASON 数组形式的参与者列表,DataTables 库是一个很好的选择。它不仅可以导出 excel,我们还可以导出 pdf、打印预览以及复制到剪贴板。我不为他们工作。我与他们没有任何关系。但我发现它对我来说非常有用。
我是一名新开发人员,目前正在学习 dotnet 核心 angular 技术。
我有一个 dotnet 核心项目,允许我使用 EPPlus.Core
库将 SQL table 下载为 excel 文件。当我测试下面的代码时,它工作正常。我可以从我的下载文件夹中获取 excel 文件。但是,当我将它发布到 IIS 时,代码工作正常但 Downloads 文件夹中没有文件。
当我调试它时,我意识到前端(在我的例子中,它是 angular)无法访问我的下载文件夹,即使我在我的控制器中明确声明也是如此。这是我的控制器代码,它允许我导出为 excel 文件。
[HttpGet]
[Route("ExportParticipants")]
public string ExportParticipants()
{
string rootFolder = System.Convert.ToString(
Microsoft.Win32.Registry.GetValue(
@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
,"{374DE290-123F-4565-9164-39C4925E467B}"
,String.Empty));
var list = DateTime.Now.ToString("yyyy-MM-dd-HH-mmss");
string fileName = @"Export_Participants_" + list + "_.xlsx";
FileInfo file = new FileInfo(Path.Combine(rootFolder, fileName));
using (ExcelPackage package = new ExcelPackage(file))
{
IList<Participant> participantList = context.Participants.ToList();
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Participants");
int totalRows = participantList.Count();
worksheet.Cells[1, 1].Value = "#";
worksheet.Cells[1, 2].Value = "FirstName";
worksheet.Cells[1, 3].Value = "Last Name";
int i = 0;
for (int row = 2; row <= totalRows + 1; row++)
{
worksheet.Cells[row, 1].Value = i+1;
worksheet.Cells[row, 2].Value = participantList[i].FirstName;
worksheet.Cells[row, 3].Value = participantList[i].LastName;
i++;
}
package.Save();
}
return " Participant list has been exported successfully";
}
上面的代码在我用邮递员测试时工作正常。但是,当我发布它时,它不起作用。我没有收到任何错误。但我发现问题是rootFolder
。所以我尝试了以下代码:
string rootFolder = Environment.GetEnvironmentVariable("USERPROFILE") + @"\" + "Downloads";
我什至尝试了 Ray Koopa's article in Code Project 但我在下载文件夹中什么也没有。
如何将这个导出的 excel 文件放到当前用户的下载文件夹中?请注意,我使用 windows。
或者我应该在前端执行此操作?我应该寻找一个 npm 包并在前端使用它吗?如果有,你推荐给我哪个套餐?
谢谢大家的帮助!
这将下载服务器下载文件夹中的 excel 文件。我将不使用 MemoryStream
,而是使用前端库。由于我有 JASON 数组形式的参与者列表,DataTables 库是一个很好的选择。它不仅可以导出 excel,我们还可以导出 pdf、打印预览以及复制到剪贴板。我不为他们工作。我与他们没有任何关系。但我发现它对我来说非常有用。