C# 如何在SharePoint 2010托管代码中存储临时文件?
我在SharePoint 2010中有一个托管的web服务,可以上传和下载到SharePoint。 因为文件可能很大(100MB+),所以我更愿意使用temp文件作为代码所经过的流,而不是内存流,以避免每次下载/上传时分配100MB内存 问题是我可以在服务器中找到一个存储临时文件的位置。System.IO.Path.GetTempFileName()引发错误,因为经过身份验证的用户没有权限访问服务器中的%TEMP%文件夹。 “%systemroot%\temp”允许写入文件,但不允许删除文件 你知道我是否可以从sharepoint获得一个位置,任何经过身份验证的用户都可以访问该位置来存储文件吗 几点注意:C# 如何在SharePoint 2010托管代码中存储临时文件?,c#,.net,sharepoint,sharepoint-2010,C#,.net,Sharepoint,Sharepoint 2010,我在SharePoint 2010中有一个托管的web服务,可以上传和下载到SharePoint。 因为文件可能很大(100MB+),所以我更愿意使用temp文件作为代码所经过的流,而不是内存流,以避免每次下载/上传时分配100MB内存 问题是我可以在服务器中找到一个存储临时文件的位置。System.IO.Path.GetTempFileName()引发错误,因为经过身份验证的用户没有权限访问服务器中的%TEMP%文件夹。 “%systemroot%\temp”允许写入文件,但不允许删除文件 你
谢谢。您需要访问SharePoint“系统帐户”下的文件。是的,System.IO.Path.GetTempFileName()是正确的位置 起点- 注释
- 如果您可以以“临时+关闭时删除”的方式打开文件(请检查FileStream类中的相应标志)
- 在RunWithElevatedPrivileges委托中运行代码时,请特别小心,不要执行对其他SharePoint资源(SPFile/SPItem…)的访问
- 您可能只需要在RunWithElevatedPrivileges下打开文件,读/写可能在外部工作-请自行验证。我会使用RunWithElevatedPrivileges保持代理内部的所有文件访问权限
您可以使用Microsoft.SharePoint.Utilities.SPUtility.GetGenericSetupPath()获取此位置,并且您应该能够读取/写入该目录。您可能需要以提升权限运行。根据我在自定义SharePoint 2007和SharePoint 2010 web services中使用HttpHandler的经验,我发现如果IIS站点设置为允许匿名,则布局下的文件对所有经过身份验证的用户甚至匿名用户开放。基本上,除了在布局下的ASPX页面内的代码内,不会应用SharePoint权限。