Sharepoint 2010 Загрузить файл с помощью Silverlight 4.0
1 Deepu Madhusoodanan [2011-07-17 14:16:00]
Я пытаюсь сделать загрузку файла из Silverlight (Client Object Model) в библиотеку Sharepoint 2010. Пожалуйста, смотрите код ниже..
try{
context = new ClientContext("http://deepu-pc/");
web = context.Web;
context.Load(web);
OpenFileDialog oFileDialog = new OpenFileDialog();
oFileDialog.FilterIndex = 1;
oFileDialog.Multiselect = false;
if (oFileDialog.ShowDialog().Value == true)
{
var localFile = new FileCreationInformation();
localFile.Content = System.IO.File.ReadAllBytes(oFileDialog.File.FullName);
localFile.Url = System.IO.Path.GetFileName(oFileDialog.File.Name);
List docs = web.Lists.GetByTitle("Gallery");
context.Load(docs);
File file = docs.RootFolder.Files.Add(localFile);
context.Load(file);
context.ExecuteQueryAsync(OnSiteLoadSuccess, OnSiteLoadFailure);
}
}
catch (Exception exp)
{
MessageBox.Show(exp.ToString());
}
Но я получаю следующую ошибку
System.Security.SecurityException: File operation not permitted. Access to path '' is denied. at System.IO.FileSecurityState.EnsureState() at System.IO.FileSystemInfo.get_FullName() at ImageUploadSilverlight.MainPage.FileUpload_Click(Object sender, RoutedEventArgs e)
Любая помощь будет оценена
благодаря
Дип
silverlight sharepoint-2010
1 ответ
3 Решение Luke Woodward [2011-07-17 16:42:00]
Silverlight работает с очень ограниченным доступом к пользовательской файловой системе клиента. При использовании диалога с открытым файлом вы можете получить имя выбранного файла в своей родительской папке, длину файла и поток, из которого следует читать данные в файле, но не намного больше. Вы не можете прочитать полный путь к выбранному файлу, и вы получаете исключение, потому что пытаетесь сделать именно это.
Если вы хотите прочитать весь контент файла в массив байтов, вам придется заменить строку
localFile.Content = System.IO.File.ReadAllBytes(oFileDialog.File.FullName);
с чем-то вроде
localFile.content = ReadFully(oFileDialog.File.OpenRead());
Метод ReadFully считывает все содержимое потока в массив байтов. Это не стандартный метод Silverlight; вместо этого он берется из этого ответа. (Я дал этому методу быстрый тест на Silverlight, и, похоже, он работает.)