我们在特殊的Sharepoint页面中托管了一个ascx自定义控件(不是Web部件)。此页面允许用户将文件上传到我们的服务器。不幸的是,权限问题阻止了Sharepoint将文件保存到网络位置。
归因于基于Sharepoint 2007的站点的应用程序池的网络帐户具有授予该位置的“修改”和“读取”访问权限。
我们使用应用程序池帐户使用的凭据登录到其他计算机,并且可以在指定的网络位置创建目录和文件而不会出现任何问题。
Sharepoint是否有可能尝试使用其他帐户来保存这些文件,而不是IIS7中的应用程序池上设置的文件?
我们得到的错误:
消息:拒绝访问路径'\ opal \ gwl \ pictures \ L36'。
System.IO上的System.IO.Directory.InternalCreateDirectory(String fullPath,String path,DirectorySecurity dirSecurity)上的System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)中的堆栈跟踪: .directory.CreateDirectory(String path,DirectorySecurity directorySecurity)at ECan.SharePoint.Web.Applications.MyECan_WaterMeterFormDatalogger.SavePhotos()
异常类型: System.UnauthorizedAccessException
用户:系统帐户
文件后面的ascx代码中的SavePhotos函数代码:
protected void SavePhotos()
{
string wellNo = WellNo.Value;
string epoWaterMeterID = EPO_WaterMeterID.Value;
string dirRoot = ConfigurationManager.AppSettings["PhotoDir"];
string map = wellNo.Substring(0, wellNo.IndexOf('/'));
int photoSaveCount = 1;
foreach (string filePath in Request.Files)
{
HttpPostedFile file = (HttpPostedFile)Request.Files[filePath];
if (file.InputStream.Length > 0)
{
try
{
// Create dir if does not exist
string dir = dirRoot + map;
if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);
// Save file
file.SaveAs(dir + @"\" + wellNo.Replace('/', '_') + "-" + epoWaterMeterID.ToString() + "-" + photoSaveCount.ToString() + ".jpg");
photoSaveCount++;
}
catch (Exception ex)
{
Logger.Write(ex);
}
}
}
}
任何人都有任何想法可能是什么问题?
答案 0 :(得分:1)
我认为您必须使用提升的权限调用SavePhotos。 使用提升权限运行代码将执行具有完全控制权限的指定方法,即使用户没有完全控制权也是如此。
见链接:
请尝试以下代码:
protected void Button1_Click(object sender, EventArgs e)
{
SPSecurity.CodeToRunElevated elevatedGetSitesAndGroups = new SPSecurity.CodeToRunElevated(SavePhotos);
SPSecurity.RunWithElevatedPrivileges(elevatedGetSitesAndGroups);
}
答案 1 :(得分:0)
您是否尝试过设置新创建的目录或文件夹的权限?您可以使用System.Security.AccessControl命名空间中的DirectorySecurity类,特别是该类的SetAccessControl方法来完成此操作。