1

我在 SharePoint 2010 中有一个托管 Web 服务,可以上传和下载到 sharepoint。因为文件可能很大(100MB+),我宁愿使用临时文件作为代码通过的流而不是内存流,以避免每次下载/上传时分配 100mb 内存。

问题是我可以在服务器中找到一个位置来存储临时文件。System.IO.Path.GetTempFileName() 引发错误,因为经过身份验证的用户没有对服务器中 %TEMP% 文件夹的权限。"%systemroot%\temp" 允许写入文件但不能删除它们。

知道我是否可以从任何经过身份验证的用户可以访问的共享点获取位置来存储文件?

几点注意事项:

  1. 这些文件是临时的,需要立即删除,因此无需考虑集群问题。

  2. 我不想要一个需要在服务器中执行任何主动操作的解决方案,因为该插件可能部署在具有大量服务器的场中,并且我不想让客户通过每台服务器。

谢谢。

4

2 回答 2

2

您需要访问 SharePoint 的“系统帐户”下的文件。是的, System.IO.Path.GetTempFileName() 是正确的位置。

起点 - SPSecurity.RunWithElevatedPrivileges

笔记

  • 如果您可以将文件打开为“临时 + 关闭时删除”(检查 FileStream 类中的适当标志)。
  • 在 RunWithElevatedPrivileges 委托中运行代码时,请特别注意不要执行对其他 SharePoint 资源 (SPFile/SPItem...) 的访问。
  • 您可能只需要在 RunWithElevatedPrivileges 下打开文件,读/写可能在外部工作 - 请验证自己。我会保留使用 RunWithElevatedPrivileges 运行的委托中的所有文件访问权限。
于 2012-06-20T09:35:35.697 回答
0

它可能不是最好的地方,但我之前使用过配置单元中的 _layouts 目录(C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS)来做类似的事情。

您可以使用 Microsoft.SharePoint.Utilities.SPUtility.GetGenericSetupPath() 获取此位置,并且您应该能够在目录中读取/写入。您可能需要以提升的权限运行。

于 2012-06-20T09:36:52.260 回答