gpt4 book ai didi

c# - OneDrive 上传/下载到指定目录

转载 作者:行者123 更新时间:2023-11-30 13:31:11 25 4
gpt4 key购买 nike

我正在尝试使用 Live SDK (v5.6) 在我的 Windows Phone 8.1 Silverlight 应用程序中包含从 OneDrive 的备份/恢复。我可以读/写标准的“me/skydrive”目录,但我在寻找上传/下载到指定目录的方法时遇到了麻烦。如果文件夹不存在,我可以创建该文件夹。

我一直在尝试下面但没有运气。

var res = await _client.UploadAsync("me/skydrive/mydir", fileName, isoStoreFileStream, OverwriteOption.Overwrite);

我也试过获取目录 ID 并将其也传递进去。

var res = await _client.UploadAsync("me/skydrive/" + folderId, fileName, isoStoreFileStream, OverwriteOption.Overwrite);

同样的错误..我收到“mydir”或不支持该 ID...

“{request_url_invalid:Microsoft.Live.LiveConnectException:URL 包含不支持的路径‘mydir’。”

有什么建议吗?如果您建议 uploadasync 的答案,您是否也可以包括我如何从指定目录下载我的文件?谢谢!

最佳答案

这是一个扩展方法,用于检查文件夹是否已创建,并且:

  1. 如果创建则返回文件夹 ID。
  2. 如果未创建,则创建它并返回文件夹 ID。

然后您可以使用此 ID 上传到该文件夹​​并从该文件夹下载。

public async static Task<string> CreateDirectoryAsync(this LiveConnectClient client,
string folderName, string parentFolder)
{
string folderId = null;

// Retrieves all the directories.
var queryFolder = parentFolder + "/files?filter=folders,albums";
var opResult = await client.GetAsync(queryFolder);
dynamic result = opResult.Result;

foreach (dynamic folder in result.data)
{
// Checks if current folder has the passed name.
if (folder.name.ToLowerInvariant() == folderName.ToLowerInvariant())
{
folderId = folder.id;
break;
}
}

if (folderId == null)
{
// Directory hasn't been found, so creates it using the PostAsync method.
var folderData = new Dictionary<string, object>();
folderData.Add("name", folderName);
opResult = await client.PostAsync(parentFolder, folderData);
result = opResult.Result;

// Retrieves the id of the created folder.
folderId = result.id;
}

return folderId;
}

然后您可以将其用作:

string skyDriveFolder = await CreateDirectoryAsync(liveConnectClient, "<YourFolderNameHere>", "me/skydrive");

现在 skyDriveFolder 有了你上传和下载时可以使用的文件夹 id。这是一个示例上传:

LiveOperationResult result = await liveConnectClient.UploadAsync(skyDriveFolder, fileName,
fileStream, OverwriteOption.Overwrite);

补充 YnotDraw 的答案

使用您提供的内容,以下是通过指定文件名下载文本文件的方法。以下不包括文件未找到和其他潜在异常情况,但以下是当星星正确对齐时有效的方法:

public async static Task<string> DownloadFileAsync(this LiveConnectClient client, string directory, string fileName)
{
string skyDriveFolder = await OneDriveHelper.CreateOrGetDirectoryAsync(client, directory, "me/skydrive");
var result = await client.DownloadAsync(skyDriveFolder);

var operation = await client.GetAsync(skyDriveFolder + "/files");

var items = operation.Result["data"] as List<object>;
string id = string.Empty;

// Search for the file - add handling here if File Not Found
foreach (object item in items)
{
IDictionary<string, object> file = item as IDictionary<string, object>;
if (file["name"].ToString() == fileName)
{
id = file["id"].ToString();
break;
}
}

var downloadResult= await client.DownloadAsync(string.Format("{0}/content", id));

var reader = new StreamReader(downloadResult.Stream);
string text = await reader.ReadToEndAsync();
return text;
}

在使用中:

var result = await DownloadFile(_client, "MyDir", "backup.txt");

关于c# - OneDrive 上传/下载到指定目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23715282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com