Sharepoint 2010 Загрузить файл с помощью Silverlight 4.0 - PullRequest
1 голос
/ 17 июля 2011

Я пытаюсь загрузить файл из Silverlight (клиентской объектной модели) в библиотеку 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)

Любая помощь будет оценена

Спасибо

Дипу

1 Ответ

3 голосов
/ 17 июля 2011

Silverlight работает с очень ограниченным доступом к файловой системе клиента.При использовании диалогового окна открытия файла вы можете получить имя выбранного файла в его родительской папке, длину файла и поток, из которого можно прочитать данные в файле, но не намного больше этого.Вы не можете прочитать полный путь к выбранному файлу и получаете исключение, потому что вы пытаетесь сделать именно это.

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

localFile.Content = System.IO.File.ReadAllBytes(oFileDialog.File.FullName);

чем-то вроде

localFile.content = ReadFully(oFileDialog.File.OpenRead());

Метод ReadFully читает все содержимое потока в байтовый массив.Это не стандартный метод Silverlight;вместо этого он берется из этого ответа .(Я дал этому методу быстрый тест на Silverlight, и он, похоже, работает.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...