2013-07-11 8 views
0

Я пытаюсь загрузить текстовый файл myFile.txt в SkyDrive. Ниже приведен код:Как загрузить файл из Inventory в SkyDrive?

private async void btnUpload_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    Client = new LiveConnectClient(_session); 
    string filename = "myFile.txt"; 

    var isolatedstorageFile= await ApplicationData.Current.LocalFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting); 

    using (StreamWriter writer = new StreamWriter(await isolatedstorageFile.OpenStreamForWriteAsync())) 
    { 
     // convert to string 
     var _String = Serialize("this is a test file"); 
     await writer.WriteAsync(_String); 
    } 

    await Client.BackgroundUploadAsync(FolderID, new Uri(isolatedstorageFile.Path), OverwriteOption.Overwrite); 
} 

FolderID глобальна и имеет значение: «folder.17ff6230f5f26b89.17FF6230F5F26B89 1533»

Проблема заключается в определении второго параметра BackgroundUploadAsync. Как его решить, т. Е. Указать URI, где находится файл изолированного хранилища «myFile.txt»?

Спасибо,

ответ

0

Вы передаете 3 аргумента в BackgroundUploadAsync где первый один является FolderId, а второй является путь к файлу, который неправильно проверить documentation first, второй аргумент принимает только имя файла не путь файла а третий - поток файла.

Также вы можете использовать UploadAsync вместо BackgroundUploadAsync.

IsolatedStorageFileStream isfs = isf.OpenFile(FileName, FileMode.Open, FileAccess.Read); 

    var res = await client.UploadAsync(folderId, FileName, isfs, OverwriteOption.Overwrite); 
+0

Его вызов 'BackgroundUploadAsync' верен, так оно и делается на Windows Phone. Проблема в том, что Ури перешел к методу. – anderZubi

0

this link для refrence.

У вас возникает проблема с загрузкой, я думаю, это потому, что вы пытаетесь загрузить файл, который не находится в папке общего доступа/переноса в изолированном хранилище. поэтому просто создайте файл в режиме общего доступа/передачи, а затем попробуйте загрузить файл в дисковод sky.

0

Чтобы загрузить файл из изолированного хранилища с помощью метода BackgroundUploadAsync, вам нужен нужный URI для файла. Путь доступа к файлам, хранящимся в изолированном хранилище, - /shared/transfers/. Итак, чтобы передать параметр URI методу, подготовьте /shared/transfers/ к имени файла. Это будет действительный URI. Смотрите ниже:

await Client.BackgroundUploadAsync(FolderID, new Uri("/shared/transfers/" + fileName, UriKind.Relative), OverwriteOption.Overwrite); 

Другой вариант заключается в использовании метода UploadAsync и присоединить поток.

0

Спасибо за все указатели, которые у меня есть. Переработала эту функцию:

private async void btnUpload_Click(object sender, System.Windows.RoutedEventArgs e) 
     { 
     string filename = "myFile.txt"; 

     StorageFolder folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("Shared", CreationCollisionOption.OpenIfExists); 
     folder = await folder.CreateFolderAsync("transfers", CreationCollisionOption.OpenIfExists); 

     var isolatedstorageFile= await folder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting); 
     using (StreamWriter writer = new StreamWriter(await isolatedstorageFile.OpenStreamForWriteAsync())) 
      { 
      // convert to string 
      var _String = Serialize("this is a test file"); 
      await writer.WriteAsync(_String); 
      } 

     await LiveHelper.Client.BackgroundUploadAsync(FolderID, new Uri("/shared/transfers/" + filename, UriKind.Relative), OverwriteOption.Overwrite); 
     } 


    private static string Serialize(object objectToSerialize) 
     { 
     using (MemoryStream _Stream = new MemoryStream()) 
      { 
      try 
       { 
       var _Serializer = new DataContractJsonSerializer(objectToSerialize.GetType()); 
       _Serializer.WriteObject(_Stream, objectToSerialize); 
       _Stream.Position = 0; 
       StreamReader _Reader = new StreamReader(_Stream); 
       return _Reader.ReadToEnd(); 
       } 
      catch (Exception e) 
       { 
       Debug.WriteLine("\n******** Serialize:" + e.Message); 
       return string.Empty; 
       } 
      } 
     } 

Файл был добавлен в правильную папку FolderID.

Эйтан

0

Чтобы загрузить файл в Skydrive, файл должен быть сохранен в "Shared/переводы//" папку в IsolatedStorage. LiveConnectClient может загружать/загружать файлы только с/на "/ shared/transfer /".

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