【发布时间】:2014-12-25 18:30:58
【问题描述】:
我在将 Excel 数据上传到部署在 SharePoint 2010 上的 .Net 控件时遇到问题。功能是将 Excel 工作表中的值以逗号分隔的形式上传到 .Net 文本框控件。在从 Excel 读取数据之前,将文档保存到服务器路径 (Server.Mappath) 的应用程序。在我的例子中,我的所有 ASPX 页面都部署在了 SharePoint 2010 Server 的 _Layouts 中。此功能在 SharePoint 2007 环境中运行良好,但在 SharePoint 2010 环境中部署时相同的功能会引发未经授权的异常。下面是我用来从 excel 上传数据和错误消息的代码。谁能帮我解决这个问题或解决任何问题?
SharePoint 2010 上的错误消息:
发生错误:System.UnauthorizedAccessException:对路径“C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\template\layouts\Test\Dev\ABC.xlsx”的访问被拒绝。在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs , String msgPath, Boolean bFromProxy) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) at System.IO.FileStream..ctor (String path, FileMode mode) at System.Web.HttpPostedFile.SaveAs(String filename) at App.Test.btnFileUpload_Click(Object sender, EventArgs e)
代码示例:
if (fileUpload.HasFile)
{
strTarget = Server.MapPath(fileUpload.FileName);
string[] arrCheckExtension = strTarget.Split('.');
if (arrCheckExtension.Length >= 2)
{
if (arrCheckExtension[1].ToString().Equals("xls") || arrCheckExtension[1].ToString().Equals("xlsx"))
{
fileUpload.SaveAs(strTarget);
strConnForExcel = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;""", strTarget);
strQueryForExcel = String.Format("select id from [{0}$]", "Test");
OleDbDataAdapter adap = new OleDbDataAdapter(strQueryForExcel, strConnForExcel);
ds = new DataSet();
adap.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
if (strids == "")
{
strids += ds.Tables[0].Rows[i]["id"].ToString();
}
else
{
strids += "," + ds.Tables[0].Rows[i]["id"].ToString();
}
}
txtUpload.Text = strids;
}
}
else
{
Response.Write("<script language='javascript'>alert('Please Select File with .xls or xlsx Extension');</script>");
}
}
}
【问题讨论】:
-
文件似乎没有关闭并且仍在使用中。我看不到哪个对象,但可能你必须
Dispose()一些东西。 -
这听起来绝对像
Permissions问题如果您是通过网页执行此操作,那么 IIS_USER 可能需要拥有完整的读取/权限而不是您的本地用户帐户.. 除非您的管理员允许所有用户有权访问该共享然后需要设置单个用户的权限我会首先从我开始我在本地遇到同样的事情如果我将文件路径更改为本地驱动器然后在你的情况下一切正常做同样的事情但是越过这一行fileUpload.SaveAs(strTarget);看看其余代码是否有效 -
@DJ KRAZE -感谢您的回复。我的管理员将不允许访问该文件夹(_Layouts)。我想知道为什么即使没有授予该文件夹任何特殊权限,这在 SharePoint 2007 上也能正常工作。我不确定是否可以将 excel 保存在本地,因为代码部署在服务器上,我正在调用保存的 excel 表以查询数据并将其转换为逗号分隔。我可以知道您将如何将文档保存到我的本地并从本地调用相同的文件来查询数据吗?或者将 excel 保存到 sharePoint 文档库并使用该链接来查询数据会起作用吗?
-
这很简单,只需在本地创建一个示例 excel 文件,出于测试目的,硬编码文件路径或将其存储在配置文件中,并在该行上放置一个断点以保存..不要在调试器中执行该行跳过它..也可以绕过该代码,您也可以从实际网络测试它我也有同样的问题,但在本地找到了解决方法..你对调试器有多熟悉
-
你似乎也省略了一些代码,例如
target and strids这些定义在哪里..
标签: c# asp.net .net sharepoint sharepoint-2010