通过SkyDrive API将文件上传到skydrive

时间:2012-08-24 15:45:28

标签: c# file-upload windows-8 microsoft-metro onedrive

我尝试将文本文件上传到我的skydrive或者至少在SD中创建新的文本文件并通过我的Windows 8应用程序中的SkyDrive API编辑它的内容。 我怎么能这样做?

我试着这样做:

        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)是否已更新?我问,因为dlls中不存在文档中的某些方法(例如,LiveConnectClient.Upload。只有BackgroundUploadAsync)。

提前感谢您的帮助, 迈克尔

3 个答案:

答案 0 :(得分: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                
}

答案 1 :(得分:2)

您应该在LiveConnectionClient上使用Upload方法。例如,请参阅Uploading Files example中的Live SDK。有点像...

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

答案 2 :(得分:0)

以下是使用从http://skydriveapiclient.codeplex.com/releases/view/103081

下载的SkyDriveApiClient从控制台应用程序上传文件的另一种方法
    static void Main(string[] args)
    {
        var client = new SkyDriveServiceClient();

        client.LogOn("YourEmail@hotmail.com", "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);
        }

    }