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, и, похоже, он работает.)