在 C# 中下载文件并将权限设置为“所有人”,但我看到访问被拒绝
本文关键字:所有人 我看 拒绝 访问 下载 文件 设置 权限 | 更新日期: 2024-10-29 14:44:32
我使用ExcelLibrary,保存Excel文件后,我想通过WebClient下载它,我为文件夹设置了完全控制,但我看到访问被拒绝。
我的代码是:
public class GenerateExcelClass
{
System.Data.DataTable dtCustmer = new System.Data.DataTable();
object[] query;
public void CreateExcelClass<T>(T[] listObj, string fileName, string sheetName = "sheet")
{
string generatefileName = fileName + HttpContext.Current.Request.Cookies["ImenBourse"]["userId"];
dtCustmer = ConvertToDatatable(listObj);
DataSet ds = new DataSet("New_DataSet");
ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
ds.Tables.Add(dtCustmer);
string newFilePath = HttpContext.Current.Server.MapPath(generatefileName + ".xls");
ExcelLibrary.DataSetHelper.CreateWorkbook(newFilePath, ds);
WebClient webClient = new WebClient();
var path = HttpContext.Current.Server.MapPath("");
webClient.DownloadFile(path, generatefileName + ".xls");
}
public static DataTable ConvertToDatatable<T>(T[] list)
{
PropertyInfo[] properties = list.GetType().GetElementType().GetProperties();
DataTable dt = CreateDataTable(properties);
if (list.Length != 0)
{
foreach (object o in list)
FillData(properties, dt, o);
}
return dt;
}
private static DataTable CreateDataTable(PropertyInfo[] properties)
{
DataTable dt = new DataTable();
DataColumn dc = null;
foreach (PropertyInfo pi in properties)
{
DisplayNameAttribute attr = (DisplayNameAttribute)Attribute.GetCustomAttribute(pi, typeof(DisplayNameAttribute));
dt.Columns.Add(attr.DisplayName, pi.PropertyType);
}
return dt;
}
private static void FillData(PropertyInfo[] properties, DataTable dt, Object o)
{
DataRow dr = dt.NewRow();
foreach (PropertyInfo pi in properties)
{
DisplayNameAttribute attr = (DisplayNameAttribute)Attribute.GetCustomAttribute(pi, typeof(DisplayNameAttribute));
if (dt.Columns.Contains(attr.DisplayName))
{
dr[attr.DisplayName] = pi.GetValue(o, null);
}
}
dt.Rows.Add(dr);
}
}
请尝试新方法...不要先公开真实文件,然后再公开服务器文件系统,而是将 Excel 文件发送到具有正确 MIME 类型的客户端浏览器。
创建文件后,如果需要,请将其保存到磁盘的文件,或者使用内存流并在响应中即时保存
指定正确的 Response.ContentType = "application/vnd.ms-excel" 并将其写入。