Загрузить файл на скайдрайв через SkyDrive API

Я пытаюсь загрузить текстовый файл на свой SkyDrive или, по крайней мере, создать новый текстовый файл на SD-карте и отредактировать его содержимое через SkyDrive API в своем приложении для Windows 8. Как я могу это сделать?

Я пытался сделать что-то вроде этого:

        LiveConnectClient client = new LiveConnectClient(session);
        var fileData = new Dictionary<string, object>();
        fileData.Add("name", "new_file.txt");
        try
        {
            LiveOperationResult fileOperationResult = await client.PutAsync("me/skydrive", fileData);
            this.infoTextBlock.Text = fileOperationResult.ToString();
        }
        catch (LiveConnectException exception)
        {
            this.infoTextBlock.Text = exception.Message;
        }

но я получаю сообщение об ошибке «Предоставленный запрос недействителен. Невозможно обновить корневую папку SkyDrive». Если я пишу что-то вроде «me/skydrive/», я получаю «Предоставленный URL-адрес недействителен. Запрошенный путь '' не поддерживается». Метод LiveConnectClient.PutAsync позволяет мне только обновлять существующие свойства (но не их содержимое).

Как это сделать правильно?

Кстати, обновляется ли контент на LCDC (http://msdn.microsoft.com/en-us/library/live/hh826531.aspx)? Я спрашиваю, потому что некоторые методы, которые есть в документации, не существуют в dll (например, LiveConnectClient.Upload. Есть только BackgroundUploadAsync).

Спасибо за помощь заранее, Майкл


person Miguzo    schedule 24.08.2012    source источник


Ответы (3)


Закрыть, но, как я уже писал: я не могу использовать метод client.upload, потому что класс LiveConnectClient не содержит его. Вот почему я спросил об обновлении контента сайта.

Во всяком случае - у меня есть ответ:

//create a StorageFile (here is one way to do that if it is stored in your ApplicationData)
StorageFile file = awaitApplicationData.Current.LocalFolder.GetFileAsync("yourfilename.txt");

try {
   client = new LiveConnectClient(session);
   LiveOperationResult operationResult = await client.BackgroundUploadAsync("me/skydrive", file.Name, file, OverwriteOption.Overwrite);
}
catch (LiveConnectException exception) {
  //handle exception                
}
person Miguzo    schedule 25.08.2012

Вы должны использовать метод Upload в LiveConnectionClient. Например, см. пример загрузки файлов в Live SDK. Что-то типа ...

LiveOperationResult fileOperationResult =
     await client.Upload("me/skydrive", /*file name here*/, /*file stream here*/);
person JP Alioto    schedule 24.08.2012

Вот еще один способ загрузить файл из консольного приложения с помощью SkyDriveApiClient, загруженного с http://skydriveapiclient.codeplex.com/releases/view/103081

    static void Main(string[] args)
    {
        var client = new SkyDriveServiceClient();

        client.LogOn("[email protected]", "password");
        WebFolderInfo wfInfo = new WebFolderInfo();

        WebFolderInfo[] wfInfoArray = client.ListRootWebFolders();

        wfInfo = wfInfoArray[0];
        client.Timeout = 1000000000;

        string fn = @"test.txt";
        if (File.Exists(fn))
        {
            client.UploadWebFile(fn, wfInfo);
        }

    }
person Nigel Findlater    schedule 15.02.2014