如何以编程方式将文件上传到我的 Skydrive 帐户,使其可共享 link?

How can I programmatically upload a file to my Skydrive account, getting its shareable link?

如果我(手动)在 Onedrive/Skydrive 中共享文件,并在 HTML5 下载元素中使用其可共享 link(这是在 ASP.NET 项目中) :

string fileUrl = "https://onedrive.live.com/redir?resid=C150662F95F0ACCE!17660&authkey=!AG7MauCst0edTWE&v=3&ithint=photo%2cpng";
string downloadElement = string.Format("<a href='{0}' download='Minimal Spreadsheet file'><button type=\"button\">Spreadsheet file</button></a>", fileUrl);
builder.Append(downloadElement);

...它工作得相当好 - 单击 link/button (downloadElement) 不会将文件下载到我的硬盘驱动器,但它会这样做:

1) Downloads a file named "redir.htm"
2) When I click that file to open it, it opens the shared file on a page, from which place it can be manually downloaded by the user.

所以我想知道的是:如何以编程方式将文件上传到我的 Skydrive 帐户,使其可共享,然后取回可共享的 URL?

我希望能够做这样的事情(在 运行 上 Windows 7 的 Winforms 应用程序中):

var skyDrive = new SkyDrive(myPwd);
string shareableUrl = skyDrive.UploadFileForSharing(someFile);

// 1) Save the value in "shareableUrl" to a database table
// 2) In a REST Get method on my Web API app, read the database table to dynamically build a list of links
// 3) Using code similar to that shown at the start of this post, cause the file itself to be downloaded (rather than an htm page (IOW, I want to "cut out the middleman")).

顺便说一句,我之所以倾向于 OneDrive(例如通过 AWS),至少现在(我最终坚持使用哪个还有待观察)是我要保存的文件和共享是 Excel / .xlsx 文件,我认为 OneDrive 可能会通过可共享的 link 支持他们的在线观看,与其他任何人一样好或更好(因为 OneDrive 和 Excel 都是微软产品)。

但是,如果 Onedrive 不提供这种 functionality/API,我愿意使用 Azure 或 AWS insead,或者其他任何东西。

更新

我稍微重构了 ASP.NET 代码;这通过直接打开包含共享文件的页面来删除 "middleman":

string sharedFileRef = string.Format("<a href='{0}' target='_blank'><button type=\"button\">Spreadsheet file</button></a>", fileUrl);
builder.Append(sharedFileRef);

...基本上,我省略了"download"爵士乐,并添加了一个"target"指令,以便共享文件在新页面中打开(可手动下载)。

你看过最新的 OneDrive API : https://dev.onedrive.com/README.htm ?

有 API 件要上传 (https://dev.onedrive.com/items/upload.htm) and for sharing (https://dev.onedrive.com/items/sharing.htm)

希望对您有所帮助