1

我们有一个 ascx 自定义控件(不是 Web 部件)托管在一个特殊的 Sharepoint 页面中。此页面允许用户将文件上传到我们的服务器。不幸的是,权限问题阻止了 Sharepoint 将文件保存到网络位置。

归属于基于 Sharepoint 2007 站点的应用程序池的网络帐户具有对该位置的“修改”和“读取”访问权限。

我们已经使用应用程序池帐户使用的凭据登录到另一台计算机,并且可以在指定的网络位置创建目录和文件而不会出现任何问题。

Sharepoint 是否有可能尝试使用其他帐户来保存这些文件,而不是在 IIS7 的应用程序池中设置的那个?

我们得到的错误:

消息:对路径 '\opal\gwl\pictures\L36' 的访问被拒绝。

堆栈跟踪: System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, DirectorySecurity dirSecurity) at System.IO.Directory.CreateDirectory(String path, DirectorySecurity directorySecurity ) 在 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);
            }
        }
    }
}

任何人都有任何想法可能是什么问题?

4

2 回答 2

1

我认为您必须以提升的权限调用 SavePhotos。即使用户没有完全控制权限,使用提升的权限运行代码也会以完全控制权限执行指定的方法。

见链接:

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.runwithelevatedprivileges(v=office.12).aspx

请尝试以下代码:

protected void Button1_Click(object sender, EventArgs e)
{
   SPSecurity.CodeToRunElevated elevatedGetSitesAndGroups = new SPSecurity.CodeToRunElevated(SavePhotos);
   SPSecurity.RunWithElevatedPrivileges(elevatedGetSitesAndGroups);
}
于 2012-06-25T04:42:14.770 回答
0

您是否尝试设置新创建的目录或文件夹的权限?您可以通过使用 System.Security.AccessControl 命名空间中的 DirectorySecurity 类,特别是该类的 SetAccessControl 方法来做到这一点。

于 2012-06-26T04:25:59.877 回答