0

私は現在ac#プロジェクトに取り組んでおり、プログラム内にドロップボックスを実装しようとしています。ドロップボックスの認証とディレクトリの作成に成功しましたが、ファイルをアップロードする方法がわかりません。

DropboxのアクセスタイプはAppFolderで、appフォルダー内にフォルダーを作成できます。ファイルをアップロードするには、テストのために、テキストフィールドに何かを書き込んでフォームを送信します。次に、実行可能ファイルの作業ディレクトリ内のテキストファイルに文字列を書き込み、ファイルをにアップロードしようとします。 appフォルダーのルートですが、one more errors have occurredおそらく最も役に立たないエラーとして例外がスローされます。

以下で重要な場合は、Dropboxを認証する方法です。

private void authenticateDropbox(Boolean isFromCallBack = false)
        {
            try
            {
                if (!isFromCallBack)
                {
                    dropboxServiceProvider = new DropboxServiceProvider(dropboxAppKey, dropboxAppSecret, AccessLevel.AppFolder);
                    //lblStatus.Content = "Getting request Token";

                    oauthToken = dropboxServiceProvider.OAuthOperations.FetchRequestTokenAsync(callbackUrl, null).Result;
                    //lblStatus.Content = "Request token retrieved";

                    parameters = new OAuth1Parameters();
                    parameters.CallbackUrl = callbackUrl;
                    string authenticateUrl = dropboxServiceProvider.OAuthOperations.BuildAuthorizeUrl(oauthToken.Value, parameters);
                    webDropbox.Navigate(new Uri(authenticateUrl));
                }
                else
                {
                    AuthorizedRequestToken requestToken = new AuthorizedRequestToken(oauthToken, null);
                    OAuthToken oauthAccessToken = dropboxServiceProvider.OAuthOperations.ExchangeForAccessTokenAsync(requestToken, null).Result;

                    Properties.Settings.Default.dropbox_accessSecret = oauthAccessToken.Secret;
                    Properties.Settings.Default.dropbox_accessToken = oauthAccessToken.Value;
                    Properties.Settings.Default.Save();

                    IDropbox dropbox = dropboxServiceProvider.GetApi(oauthAccessToken.Value, oauthAccessToken.Secret);

                    DropboxProfile profile = dropbox.GetUserProfileAsync().Result;
                    Close();
                    MessageBox.Show("Welcome " + profile.DisplayName, "DropBox Success", MessageBoxButton.OK, MessageBoxImage.Information);
                }
            }
            catch (AggregateException ex)
            {
                MessageBox.Show("AggregateException: Failed to authenticate\n\n" + ex.Message, "Authentication Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show("General Exception: Failed to authenticate\n\n" + ex.Message, "Authentication Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

        private void webDropbox_Navigating(object sender, System.Windows.Navigation.NavigatingCancelEventArgs e)
        {
            string url = e.Uri.ToString();
            if (url.StartsWith(callbackUrl, StringComparison.OrdinalIgnoreCase))
            {
                authenticateDropbox(true);
            }
        }

以下は、動作しているディレクトリを作成し、ファイルをアップロードする方法に関するコードです。

private void uploadContentToDropbox()
        {
            try
            {
                DropboxServiceProvider dropboxServiceProvider = new DropboxServiceProvider(dropboxAppKey, dropboxAppSecret, AccessLevel.AppFolder);
                IDropbox dropbox = dropboxServiceProvider.GetApi(Properties.Settings.Default.dropbox_accessToken, Properties.Settings.Default.dropbox_accessSecret);

                //DeltaPage deltaPage = dropbox.DeltaAsync(null).Result;
                writeContentToFile();

                Entry createFolderEntry = dropbox.CreateFolderAsync("Test Folder").Result;

                Entry uploadFileEntry = dropbox.UploadFileAsync(
                    new AssemblyResource("assembly://DropBoxTest/DropBoxTest/upload.txt"), "upload.txt", true, null, CancellationToken.None).Result;
            }
            catch (AggregateException ex)
            {
                MessageBox.Show("Failed to upload:\n\n" + ex.Message, "Dropbox Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show("General failed to upload:\n\n" + ex.Message, "Dropbox Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }

プログラムのリソースではなく、作成された単なるテキストファイルであるため、新しいAssemblyResourceと言う必要がある理由がわからないため、これが必要なものかどうかuploadFileEntryはわかりません。

あなたが提供できるどんな助けにも感謝します。

4

1 に答える 1

1

私は何時間もGoogleをトロールした後、何をすべきかを見つけることができ、何かを見つけるために運を得ることができました。

アセンブリリソースである必要はないので、代わりに以前と同じようにファイルを作成しますが、アップロードを実行する前に次のようにします。

var res = new FileResource("upload.txt");

次に、アップロードを次のように変更します。

Entry uploadFileEntry = dropbox.UploadFileAsync(
                    res, "upload.txt", true, null, CancellationToken.None).Result;

私はもう新しいAssemblyResourceを行っていないことに注意してください。

于 2012-12-16T03:29:15.937 に答える