Question

I'm using DropNet for Dropbox OAuth but I have one major problem - I can't store access token key and secret cause there is no point storing them. The storing mechanism is not a problem and not a key problem here - the problem is in this:

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);
        }
    }

The problem here is - first time it uploads ok, but the second time it doesn't - although dropboxLoggedIn is true, and access token key and secret are stored ok, it doesn't upload file, but more strangely it doesn't return any error or exception. If I move GetToken out of if same thing happens. I know I'm doing somewhere wrong, but I can't quite get where. I've striped some parts of code like file paths and getting the file which are irrelevant. I did the same thing for Twitter, but it works there with no problems. Any ideas?

Was it helpful?

Solution 3

Ok, so the problem was in initialization of the object - if you do:

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

This wouldn't work - instead it needs to be initialized like this:

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

I'm not sure where I found the first code sample in some documentation or forum but it's wrong. If you use it - no error or exception will happen, but dropbox file upload or operation won't be done. If you use the second one all will work.

OTHER TIPS

This link should help with that issue: http://forums.dropbox.com/topic.php?id=61115&replies=6

Basically you need to initialize your DropNetClient _Dclient instance out of the Upload File method. When you got access token you should keep it in your session or config file and you won't need to do it every time you upload file.

From the looks of that line 3 is messing you up: if (!dropboxLoggedIn)

So you are only continuing if the user is not logged in but on the 2nd attempt your saying that should be true, thus skipping all of your upload code.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top