我遇到了将Excel数据上传到部署在SharePoint 2010上的.Net控件的问题。该功能是将Excel表格中的值上传为.Net文本框控件的逗号分隔。在从Excel读取数据之前,文档将保存到服务器路径(Server.Mappath) 申请。就我而言,它是SharePoint 2010 Server的_Layouts,其中部署了所有ASPX页面。此功能在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)at System.IO.FileStream.Init(String path,FileMode mode,FileAccess access,Int32 rights,Boolean useRights,FileShare share,Int32 bufferSize,FileOptions options,SECURITY_ATTRIBUTES secAttrs) System.IO.FileStream..ctor上的System.IO.FileStream..ctor(String path,FileMode mode,FileAccess access,FileShare share,Int32 bufferSize,FileOptions options,String msgPath,Boolean bFromProxy)中的,String msgPath,Boolean bFromProxy) (String path,FileMode模式)位于App.Test.btnFileUpload_Click的System.Web.HttpPostedFile.SaveAs(String filename)(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>");
}
}
}
答案 0 :(得分:0)
问题在于许可。默认情况下,用于SharePoint Web应用程序的帐户无权访问SharePoint配置单元文件夹。这是有充分理由的。但您可以使用其他文件夹。此外,您还应该生成上传文件的随机名称,因为两个不同的用户可以上传相同名称的不同文件。
您可以使用以下代码:
var tmpFolderPath = Path.Combine(Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.System)).FullName, "Temp");
var tmpPath = Path.Combine(tmpFolderPath, string.Format("excelImport_{0}.tmp", (Guid.NewGuid())));
它使用系统临时文件夹(默认情况下为c:\ windows \ temp),并生成随机文件名。