我正在寻找一种方法来从所有各种云存储系统中读取文件,而无需为每个特定的 API 编写代码。有没有办法做到这一点?我们需要的很简单:
- 一种获取 FileOpen 对话框的文件夹内容的方法。
- 一种读取选定文件的方法。
- 可选:一个 FileOpen 对话框,它完成所有工作以显示文件并选择一个。
谢谢 - 戴夫
我正在寻找一种方法来从所有各种云存储系统中读取文件,而无需为每个特定的 API 编写代码。有没有办法做到这一点?我们需要的很简单:
谢谢 - 戴夫
这个问题有一个解决方案。 point.io有一个公共 api,它通过 restful api 代理对云和企业存储提供商的访问。它基本上具有您正在寻找的功能。该 api 使开发人员能够将各种存储提供程序视为类型,并为您的应用程序完成所有繁重的工作。
他们有一个github 存储库,其中包含 C# src 代码示例
下面是一些调用文件列表的简单 C# 代码:
public async Task<List<FolderContent>> list(String sessionKey, String shareid, String containerid, String path)
{
HttpClient tClient = new HttpClient();
tClient.DefaultRequestHeaders.Add("AUTHORIZATION", sessionKey);
var query = HttpUtility.ParseQueryString(string.Empty);
query["folderid"] = shareid;
query["containerid"] = containerid;
query["path"] = path;
string queryString = query.ToString();
var rTask = await tClient.GetAsync(PointIODemo.MvcApplication.APIUrl + "folders/list.json?" + queryString);
var rContent = rTask.Content.ReadAsStringAsync().Result;
var oResponse = JsonConvert.DeserializeObject<dynamic>(rContent);
if (oResponse["ERROR"] == "1")
{
HttpContext.Current.Response.Redirect("/Home/ErrorTemplate/?errorMessage=" + oResponse["MESSAGE"]);
}
var rawColList = JsonConvert.DeserializeObject<List<dynamic>>(JsonConvert.SerializeObject(oResponse["RESULT"]["COLUMNS"]));
var rawContentList = JsonConvert.DeserializeObject<List<dynamic>>(JsonConvert.SerializeObject(oResponse["RESULT"]["DATA"]));
var fContentList = new List<FolderContent>();
foreach (var item in rawContentList)
{
FolderContent tContent = new FolderContent();
tContent.fileid = item[MvcApplication.getColNum("FILEID", rawColList)];
tContent.filename = item[MvcApplication.getColNum("NAME", rawColList)];
tContent.containerid = item[MvcApplication.getColNum("CONTAINERID", rawColList)];
tContent.remotepath = item[MvcApplication.getColNum("PATH", rawColList)];
tContent.type = item[MvcApplication.getColNum("TYPE", rawColList)];
tContent.size = item[MvcApplication.getColNum("SIZE", rawColList)];
tContent.modified = item[MvcApplication.getColNum("MODIFIED", rawColList)];
fContentList.Add(tContent);
}
return fContentList;
}
您可以将“API v1(核心 API)”用于:一种获取 FileOpen 对话框的文件夹内容的方法。一种读取选定文件的方法。可选:一个 FileOpen 对话框,它完成所有工作以显示文件并选择一个。
举个简单的例子:从您的保管箱帐户中获取文件和文件夹列表
//get the files from dropbox account and add it to listbox
private void GetFiles()
{
OAuthUtility.GetAsync
(
"https://api.dropboxapi.com/1/metadata/auto/",
new HttpParameterCollection
{
{ "path", this.CurrentPath },
{ "access_token", Properties.Settings.Default.AccessToken }
},
callback : GetFiles_Results
);
}
private void GetFiles_Results(RequestResult result)
{
if(this.InvokeRequired)
{
this.Invoke(new Action<RequestResult>(GetFiles_Results), result);
return;
}
if (result.StatusCode == 200) //200 OK- Success Codes
{
listBox1.Items.Clear();
listBox1.DisplayMember = "path";
foreach (UniValue file in result["contents"])
{
listBox1.Items.Add(file);
}
if(this.CurrentPath != "/")
{
listBox1.Items.Insert(0,UniValue.ParseJson("{path: '..'}"));
}
}
else
{
MessageBox.Show("Failed to add file to listbox");
}
}