1

SharePoint 2010 で、SharePoint へのアップロードとダウンロードを行うホストされた Web サービスを使用しています。ファイルが大きくなる可能性があるため (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 に答える