【发布时间】:2018-10-17 18:19:29
【问题描述】:
我正在尝试浏览文件,然后将该文件保存到一个文件夹中并尝试使用 OLEDB 读取该文件,一切都在本地工作文件以及在本地工作在 IIS 上。当我在服务器上发布时,它不起作用,出现异常,因为“访问路径'C:\inetpub\wwwroot\exceptApp\Files\TemplateFile.xlsx'被拒绝。”,IIS_USERS 用户对文件夹具有完全权限。下面是我的代码
protected void BtnSubmit_Click(object sender, EventArgs e)
{
try
{
grdResult.DataSource = null;
grdResult.DataBind();
BtnExport.Visible = false;
if (fuFile.HasFile)
{
string readConnString = "";
var fileExtn = Path.GetExtension(fuFile.FileName).ToLower();
var dir = Server.MapPath("~\\Files");
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
var fileName = Path.GetFileName(fuFile.FileName.Trim());
var fileNameWithPath = Path.Combine(dir, fileName);
if (File.Exists(fileNameWithPath))
{
File.Delete(fileNameWithPath);
}
fuFile.PostedFile.SaveAs(fileNameWithPath);
fuFile.FileContent.Dispose();
//Connection String to Excel Workbook
if (fileExtn.Trim() == ".xls")
{
readConnString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", fileNameWithPath);
}
else if (fileExtn.Trim() == ".xlsx")
{
readConnString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";", fileNameWithPath);
}
using (var dbConn = new OleDbConnection(readConnString))
{
dbConn.Open();
var dt = dbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
using (var cmd = new OleDbCommand(@"SELECT * FROM [" + dt.Rows[0]["TABLE_NAME"].ToString() + "]", dbConn))
{
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
var resultDt = ds.Tables[0];
dbConn.Close();
if (resultDt.Rows.Count > 0)
{
BtnExport.Visible = true;
grdResult.DataSource = resultDt;
grdResult.DataBind();
}
}
}
Thread.Sleep(1000);
if (File.Exists(fileNameWithPath))
{
File.Delete(fileNameWithPath);
}
}
}
catch (Exception ex)
{
exlog.Log("BtnSubmit_Click", ex.Message);
}
}
【问题讨论】:
-
我会将文件夹设置为文件共享,然后让程序通过文件共享地址 (\\server\Share) 访问它,即使它在本地运行也是如此
-
尝试为每个文件夹授予完全权限,看看是否仍然出现错误?如果错误消失这意味着文件夹权限配置中的点,这将节省一些时间并使事情更容易找到解决方案。