1

我将 DropNet 用于 Dropbox OAuth,但我有一个主要问题 - 我无法存储访问令牌密钥和机密,因为存储它们毫无意义。存储机制不是问题,也不是关键问题——问题在于:

private void dropboxUpload()
{
    DropNetClient _Dclient = new DropNetClient("xxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyy");
    _Dclient.UseSandbox = true;
    if (!dropboxLoggedIn)
    {
            _Dclient.GetToken();
            string url = _Dclient.BuildAuthorizeUrl();
            Process.Start(url);
            if (MessageBox.Show("Click OK after you have allowed Sizester to create and access a sub-folder called Sizester in a folder called Apps in your Dropbox account.", "Sizester access request", MessageBoxButtons.OKCancel) != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }
        }
        try
        {
            if (!dropboxLoggedIn)
            {
                _Dclient.GetAccessToken();
                dropboxAsecret = _Dclient.UserLogin.Secret;
                dropboxAtoken = _Dclient.UserLogin.Token;
            }
            else
            {
                _Dclient.UserLogin.Token = dropboxAtoken;
                _Dclient.UserLogin.Secret = dropboxAsecret;
            }
            dropboxLoggedIn = true;
            //...
            _Dclient.UploadFile("/", fileE, FileToByteArray(newFilePath));
            MessageBox.Show("Successfully uploaded to Dropbox.", "Uploaded to Dropbox");
        }
        catch (Exception dropboxEx)
        {
            MessageBox.Show("Error: " + dropboxEx.Message);
        }
    }

这里的问题是 - 第一次上传正常,但第二次没有 - 虽然 dropboxLoggedIn 为真,并且访问令牌密钥和秘密存储正常,但它不上传文件,但更奇怪的是它不返回任何错误或异常。如果发生同样的事情,我将 GetToken 移出。我知道我在某个地方做错了,但我不知道在哪里。我已经剥离了一些代码部分,如文件路径并获取不相关的文件。我为 Twitter 做了同样的事情,但它在那里没有问题。有任何想法吗?

4

3 回答 3

1

此链接应该有助于解决该问题: http ://forums.dropbox.com/topic.php?id=61115&replies=6

基本上,您需要DropNetClient _Dclient从 Upload File 方法中初始化您的实例。当您获得访问令牌时,您应该将其保存在您的会话或配置文件中,并且每次上传文件时都不需要这样做。

于 2012-05-31T12:50:39.933 回答
1

从第 3 行的外观来看,你搞砸了:if (!dropboxLoggedIn)

因此,只有在用户未登录但第二次尝试您所说的应该是真的时,您才继续,从而跳过所有上传代码。

于 2012-06-03T22:14:19.730 回答
1

好的,所以问题在于对象的初始化 - 如果你这样做:

DropNetClient _Dclient = new DropNetClient("xxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyy");
_Dclient.UseSandbox = true;
_Dclient.UserLogin.Token = "zzzzzzzzzzzzzzz";
_Dclient.UserLogin.Secret = "wwwwwwwwwwwwww";

这是行不通的——相反,它需要像这样初始化:

DropNetClient _Dclient = new DropNetClient("xxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyy","zzzzzzzzzzzzzzz","wwwwwwwwwwwwww");
_Dclient.UseSandbox = true;

我不确定我在某些文档或论坛中在哪里找到了第一个代码示例,但这是错误的。如果您使用它 - 不会发生错误或异常,但不会完成 Dropbox 文件上传或操作。如果你使用第二个,一切都会奏效。

于 2012-06-04T22:12:25.580 回答