C# 如何在SharePoint 2010托管代码中存储临时文件?

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 2010中有一个托管的web服务,可以上传和下载到SharePoint。 因为文件可能很大(100MB+),所以我更愿意使用temp文件作为代码所经过的流,而不是内存流,以避免每次下载/上传时分配100MB内存

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

你知道我是否可以从sharepoint获得一个位置,任何经过身份验证的用户都可以访问该位置来存储文件吗

几点注意:

>P>文件是临时的,需要立即删除,不需要考虑聚类问题。

  • 我不希望解决方案需要在服务器上执行任何主动操作,因为这个插件可能部署在有很多服务器的服务器场上,我不想让客户检查每台服务器


  • 谢谢。

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

    起点-

    注释

    • 如果您可以以“临时+关闭时删除”的方式打开文件(请检查FileStream类中的相应标志)
    • 在RunWithElevatedPrivileges委托中运行代码时,请特别小心,不要执行对其他SharePoint资源(SPFile/SPItem…)的访问
    • 您可能只需要在RunWithElevatedPrivileges下打开文件,读/写可能在外部工作-请自行验证。我会使用RunWithElevatedPrivileges保持代理内部的所有文件访问权限

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


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

    根据我在自定义SharePoint 2007和SharePoint 2010 web services中使用HttpHandler的经验,我发现如果IIS站点设置为允许匿名,则布局下的文件对所有经过身份验证的用户甚至匿名用户开放。基本上,除了在布局下的ASPX页面内的代码内,不会应用SharePoint权限。