簡體   English   中英

如何使用C#獲取本地Dropbox文件的共享URL

[英]How do I get the share url of a local dropbox file using C#

我正在使用DropNet API來檢索本地文件的共享鏈接,但無法通過GetAccessToken(),因為它為null。

到目前為止,這是我的代碼:

var _client = new DropNetClient(APIKEY, APISEC);
_client.GetToken();
var url = _client.BuildAuthorizeUrl();
Process.Start(url);
var accessToken = _client.GetAccessToken();                    
var shareResponse = _client.GetShare("/Getting Started.rtf");
MessageBox.Show(shareResponse.Url);

拋出GetShare()的異常:

System.Reflection.TargetInvocationException

這與我啟動瀏覽器的方式有關,但是我已經花了幾個小時了,謝謝您的幫助!

幾個小時之后,我終於從Spring.Social(來自NuGet)找到了不錯的文檔。

這里是:

  1. 在此處注冊新應用以鏈接到您的程序: DropBox / Developer / Apps

  2. 安裝NuGet包Spring.Social.Dropbox。

  3. 使用下面的示例進行連接。

     using Spring.Social.Dropbox.Api; using Spring.Social.Dropbox.Connect; using Spring.Social.OAuth1; private void ShareViaDropbox(string[,] filesNameLink) { try { if (CheckForInternetConnection()) // cant use dropbox without internet. { string consumerKey = "<get this from dropbox>"; string consumerSecret = "<get this from dropbox>"; DropboxServiceProvider dropboxServiceProvider = new DropboxServiceProvider(consumerKey, consumerSecret, AccessLevel.Full); IOAuth1Operations oauthOperations = dropboxServiceProvider.OAuthOperations; // I used an xml file to store the key (probably not the most secure later I will write an encryption). string[] storedToken = GetTag("<DropBoxToken>", ",").Split(','); OAuthToken oauthAccessToken = new OAuthToken(storedToken[0], storedToken[1]); // testing if we got something from the earlier xml tag. if (oauthAccessToken.Value == string.Empty || oauthAccessToken.Value == "") { Console.Write("Getting request token..."); OAuthToken oauthToken = dropboxServiceProvider.OAuthOperations.FetchRequestTokenAsync(null, null).Result; Console.WriteLine("Done"); OAuth1Parameters parameters = new OAuth1Parameters(); string authenticateUrl = dropboxServiceProvider.OAuthOperations.BuildAuthorizeUrl(oauthToken.Value, parameters); Console.WriteLine("Redirect user for authorization"); // let the user know they have to sign in and chose the correct dropbox. this is also where most documentation leaves off! MessageBox.Show( "This is the first time you have connected to DropBox. A browser will open and direct you the the DropBox authentication page. When you prompted, please sign in and then choose the [named] DropBox." + Environment.NewLine + "Once you have succesfully compleaded the authorization confirmation from DropBox, you may close the browser to continue." + Environment.NewLine + Environment.NewLine + "Click 'Ok' to proceed", "DropBox Authentication Required.", MessageBoxButtons.OK, MessageBoxIcon.Information); Process.Start(authenticateUrl); // halt the program until the user has authenticated. MessageBox.Show("Click 'OK' when authorization has succeeded.", "DropBox Authentication - WAIT", MessageBoxButtons.OK, MessageBoxIcon.Stop); Console.Write("Press any key when authorization attempt has succeeded"); Console.Write("Getting access token..."); AuthorizedRequestToken requestToken = new AuthorizedRequestToken(oauthToken, null); oauthAccessToken = dropboxServiceProvider.OAuthOperations.ExchangeForAccessTokenAsync(requestToken, null).Result; Console.WriteLine("Done"); ChangeTag("<DropBoxToken>", oauthAccessToken.Value + "," + oauthAccessToken.Secret); // update the xml file with the token. } IDropbox dropbox = dropboxServiceProvider.GetApi(oauthAccessToken.Value, oauthAccessToken.Secret); DropboxLink shareableLink; double filesNameLength = Math.Ceiling(Convert.ToDouble(filesNameLink.Length / 2)); // remove everything before the users special folder path including the dropbbox folder. // then change all the switches to front from back for the web. for (int i = 0; i < filesNameLength; i++) { filesNameLink[i, 1] = filesNameLink[i, 0]; filesNameLink[i, 0] = Path.GetFileName(filesNameLink[i, 0]); filesNameLink[i, 1] = filesNameLink[i, 1].Replace(dropboxRootDir, "").Replace("\\\\", "/"); shareableLink = dropbox.GetShareableLinkAsync(filesNameLink[i, 1].Replace("\\\\", "/")).Result; filesNameLink[i, 1] = shareableLink.Url; } // do something with the link(s). // catch { } } } catch { } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM