2012-06-20 3 views
0

У меня есть размещенная веб-служба в SharePoint 2010, которая загружает и загружает sharepoint. Поскольку файлы могут быть большими (100 Мбайт +), я бы скорее использовал временные файлы в качестве потоков, через которые проходит код, вместо потоков памяти, чтобы избежать распределения памяти по 100 МБ каждый раз, когда он загружает/выгружает.Как хранить временные файлы в размещенном в SharePoint 2010 коде?

Проблема в том, что я могу найти местоположение на сервере для хранения временных файлов. System.IO.Path.GetTempFileName() выдает ошибку, потому что у аутентифицированного пользователя нет разрешений на% TEMP% на сервере. «% systemroot% \ temp» позволяет записывать файлы, но не удалять их.

Любая идея, могу ли я получить местоположение из sharepoint, доступное для любого аутентифицированного пользователя для хранения файлов?

несколько замечаний:

  1. файлы являются временными и должны не быть удалены сразу же, так нет необходимости рассматривать вопросы кластеризации.

  2. Я не хочу, чтобы решение, требующее каких-либо активных действий на серверах, поскольку этот плагин может быть развернут на фермах с большим количеством серверов, и мне не хотелось бы просить клиента пройти через каждый сервер.

Спасибо.

ответ

1

Вам необходимо получить доступ к файлам под «системной учетной записью» SharePoint. И да, System.IO.Path.GetTempFileName() - правильное местоположение.

Начальная точка - SPSecurity.RunWithElevatedPrivileges.

Примечания

  • Если вы можете открывать файлы, как «временный + удалить при закрытии» (проверьте соответствующие флаги в классе FileStream).
  • Будьте предельно осторожны, чтобы не выполнять доступ к другому ресурсу SharePoint (SPFile/SPItem ...) при запуске кода внутри делегата RunWithElevatedPrivileges.
  • Вам может понадобиться только открыть файл под RunWithElevatedPrivileges, чтение/запись может работать вне - убедитесь, что вы сами. Я бы сохранил доступ к файлам внутри делегатов, работающих с RunWithElevatedPrivileges.
0

Это не может быть лучшим местом, но я использовал каталог _Layouts в улей до (C: \ Program Files \ Common Files \ Microsoft Shared \ Web Server Extensions \ 14 \ ШАБЛОН \ Layouts) для делать что-то как и раньше.

Вы можете получить это местоположение с помощью Microsoft.SharePoint.Utilities.SPUtility.GetGenericSetupPath(), и вы должны иметь возможность читать/писать в каталоге. Возможно, вам придется выполнять роль повышенных разрешений.

+0

Основываясь на моем опыте работы с HttpHandlers в пользовательских веб-службах SharePoint 2007 и SharePoint 2010, я обнаружил, что файлы под макетами открыты для всех аутентифицированных пользователей и даже анонимных пользователей, если на сайте IIS установлено разрешение анонимного. В принципе, никакие разрешения SharePoint не применяются, кроме кода внутри ASPX-страниц, которые находятся под макетами. –

Смежные вопросы