Dropbox API Невозможно загрузить файл Проблема при загрузке

Я использую HigLabo.Net.Dropbox для загрузки файла в Dropbox. Я создал приложение с именем synch и пытаюсь загрузить файл. Ниже мой код

 byte[] bytes = System.IO.File.ReadAllBytes(args[1]);   
 UploadFile(bytes,"sundas.jpg","/Apps/synch/");   


public static void UploadFile(byte[] content, string filename, string target)
    {
        string App_key = "xxxxxxxxxxxxxxx";
        string App_secret = "yyyyyyyyyyyyyy";
        HigLabo.Net.OAuthClient ocl = null;
        HigLabo.Net.AuthorizeInfo ai = null;                    
        ocl = HigLabo.Net.Dropbox.DropboxClient.CreateOAuthClient(App_key, App_secret);                        
        ai = ocl.GetAuthorizeInfo();             
        string RequestToken= ai.RequestToken;
        string RequestTokenSecret= ai.RequestTokenSecret;
        string redirect_url = ai.AuthorizeUrl;
        AccessTokenInfo t = ocl.GetAccessToken(RequestToken, RequestTokenSecret); 
        string Token= t.Token;
        string TokenSecret= t.TokenSecret;
        DropboxClient cl = new DropboxClient(App_key, App_secret, Token, TokenSecret); 
        HigLabo.Net.Dropbox.UploadFileCommand ul = new HigLabo.Net.Dropbox.UploadFileCommand();
        ul.Root = RootFolder.Sandbox;

        Console.WriteLine(ul.Root);
        ul.FolderPath = target;
        ul.FileName = filename;
        ul.LoadFileData(content); 
        Metadata md = cl.UploadFile(ul);
        Console.WriteLine("END");
    }

Код выполняется нормально, но файл не загружается в Dropbox.

Я что-то упускаю? Путь для загрузки правильный? Как просмотреть файл в Dropbox независимо от того, загружен он или нет?

Есть ли параметр, который мне не хватает при создании приложения? Я просто смотрю на домашнюю страницу и ожидаю файл в корневой папке. Я прав?

Или мне нужно посмотреть в каком-то другом месте?


person Timothy Rajan    schedule 15.09.2015    source источник
comment
Получаете ли вы какие-либо ошибки, возвращаемые данные из запросов API?   -  person Callum Linington    schedule 15.09.2015
comment
Спасибо за сообщение. Я получил {ошибка: Ошибка аутентификации} при печати.... Не уверен, какая аутентификация не удалась. Я использую секретный ключ из браузера Dropbox. Есть ли еще какая-то аутентификация, которую мне нужно предоставить?   -  person Timothy Rajan    schedule 15.09.2015
comment
Я узнал, что мне нужно вручную авторизоваться, указав свои учетные данные Dropbox. Мне нужно, чтобы это было автоматизировано. Я знал код доступа. Есть ли способ авторизовать его через код и избежать ручного вмешательства через браузер?   -  person Timothy Rajan    schedule 15.09.2015
comment
Кроме того, обратите внимание, что если ваше приложение зарегистрировано для доступа к папке приложения, т. е. оно помещено в песочницу, поскольку оно основано на вашем коде ul.Root = RootFolder.Sandbox;, вам не нужно вручную указывать пути, такие как /Apps/synch/. Вы должны просто указать / и так далее, и он будет автоматически переведен API в путь к папке вашего приложения.   -  person Greg    schedule 15.09.2015
comment
Спасибо @Greg. Я хочу, чтобы это было полностью автоматизировано. Если эта библиотека поддерживает oAuth1.0, можете ли вы указать мне библиотеку, которая использует oAuth2.0. Поскольку я получаю код доступа из консоли приложения, я хочу использовать его, а не входить в систему вручную. Спасибо за вашу помощь.   -  person Timothy Rajan    schedule 15.09.2015
comment
Для версии 1 Dropbox API нет официального C# SDK, но есть сторонние, которые могут использовать OAuth 2: dropbox.com/developers/core/sdks/other Для Dropbox API v2, в настоящее время это просто предварительная версия, есть официальный: dropbox.com/developers-preview/documentation/c-sharp   -  person Greg    schedule 15.09.2015


Ответы (1)


Спасибо @smarx и @Greg.

Ниже приведен код для выполнения задачи. Еще раз спасибо за вашу поддержку, я надеюсь, что это будет полезно для кого-то.

string filePath="C:\\Tim\\sundar.jpg";
RestClient client = new RestClient("https://api-content.dropbox.com/1/");
IRestRequest request = new RestRequest("files_put/auto/{path}", Method.PUT);
FileInfo fileInfo = new FileInfo(filePath);
long fileLength = fileInfo.Length;
request.AddHeader("Authorization", "Bearer FTXXXXXXXXXXXXXXXXXXXisqFXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
request.AddHeader("Content-Length", fileLength.ToString());
request.AddUrlSegment("path", string.Format("Public/{0}", fileInfo.Name));
byte[] data = File.ReadAllBytes(filePath);
var body = new Parameter
{
    Name = "file",
    Value = data,
    Type = ParameterType.RequestBody,
};
request.Parameters.Add(body);
IRestResponse response = client.Execute(request);
person Timothy Rajan    schedule 16.09.2015