2012-06-20 69 views
0

我在SharePoint 2010中有一個託管的Web服務,可以上傳和下載到SharePoint。 因爲文件可能很大(100MB +),所以我更願意使用臨時文件作爲代碼通過的流而不是內存流,以避免每次下載/上載時分配100MB的內存。如何在SharePoint 2010託管代碼中存儲臨時文件?

問題是我可以在服務器中找到存儲臨時文件的位置。 System.IO.Path.GetTempFileName()會引發錯誤,因爲已通過身份驗證的用戶對服務器中的%TEMP%文件夾沒有權限。 「%systemroot%\ temp」允許寫入文件但不刪除它們。

任何想法,如果我可以從任何經過身份驗證的用戶可以訪問的sharepoint位置來存儲文件?

幾點注意事項:

  1. 的文件是暫時的,需要立即被刪除,以便無需考慮羣集問題。

  2. 我不想要一個解決方案,需要在服務器上執行任何主動操作,因爲此插件可能部署在擁有大量服務器的服務器上,而且我不想要求客戶通過每臺服務器。

謝謝。

回答

1

您需要訪問SharePoint的「系統帳戶」下的文件。是的,System.IO.Path.GetTempFileName()是正確的位置。

起點 - SPSecurity.RunWithElevatedPrivileges

  • 如果您能夠打開文件「暫時+刪除關閉」(檢查FileStream類相應的標誌)。
  • 在RunWithElevatedPrivileges委託內部運行代碼時,請特別小心,不要執行對其他SharePoint資源(SPFile/SPItem ...)的訪問。
  • 您可能只需要在RunWithElevatedPrivileges下打開文件,讀/寫可能在外面工作 - 請驗證自己。我會保留在RunWithElevatedPrivileges運行的委託內的所有文件訪問。
0

它可能不是最好的地方,但我已經在配置單元中使用了_layouts目錄(C:\ Program Files \ Common Files \ Microsoft Shared \ Web Server Extensions \ 14 \ TEMPLATE \ LAYOUTS)與之前類似。

您可以使用Microsoft.SharePoint.Utilities.SPUtility.GetGenericSetupPath()獲取此位置,並且您應該能夠在目錄中讀取/寫入。您可能需要以提升的權限運行。

+0

基於我在自定義SharePoint 2007和SharePoint 2010 Web服務中使用HttpHandlers的經驗,我發現如果IIS站點設置爲允許匿名,則佈局下的文件對所有經過身份驗證的用戶甚至匿名用戶都是開放的。基本上,除了佈局下的ASPX頁面內的代碼之外,不應用SharePoint權限。 –