короткая статья о проблеме {«error»: «v1_retired»}

я использовалDropbox API V1 в моем веб-приложении для загрузки файлов моей учетной записи Dropbox. Обратите внимание, что приложение использует только одну учетную запись Dropbox (мою) для загрузки файлов.

Так ранее:

Я создал приложение на Dropbox разработчики минусы, олеСгенерировал мой токен из консоли разработчиковЭтот токен жестко запрограммирован на моем сервере для загрузки всех файлов в определенную папку в моем Dropbox.

Раньше это прекрасно работало, но поскольку Dropbox API v1 устарел, он больше не работает.

Код Dropbox V1:

function fileupload(content) {
 request.put('https://api-content.dropbox.com/1/files_put/auto/my_reports/report.pdf', {
            headers: {
                Authorization: 'TOKEN HERE',
                'Content-Type': 'application/pdf'
            },
            body: content
        }, function optionalCallback(err, httpResponse, bodymsg) {
            if (err) {
                console.log(err);
            }
            else {
                console.log("File uploaded to dropbox successfully!");
                fs.unlink(temp_dir + 'report.pdf', function(err) {
                    if (err)
                        throw err;
                    else {
                        console.log("file deleted from server!");
                    }
                })
                request.post('https://api.dropboxapi.com/1/shares/auto/MY_reports/report.pdf' + '?short_url=false', {
                    headers: {
                        Authorization: 'TOKEN HERE'
                    }
                }, function optionalCallback(err, httpResponse, bodymsg) {
                    if (err) {
                        console.log(err);
                    }
                    else {
                        console.log('Shared link 2 ' + JSON.parse(httpResponse.body).url);

                    }
                });

            }
        });
     }

Код Dropbox V2:

function fileupload(content) {
 request.post('https://content.dropboxapi.com/2/files/upload/my_reports', {
            headers: {
                Authorization: 'TOKEN HERE',
                'Content-Type': 'application/pdf'
            },
            body: content
        } ......... (rest of the code is similar to above)

Выпуск:

То, что я пробовал, не работает. Я не могу загрузить файл в мою учетную запись Dropbox из моего приложения.Я попытался заново сгенерировать свой TOKEN из консоли Dropbox App, но безуспешно.

Может кто-нибудь сказать мне, что я делаю не так?

Обновить:

Я обновил свой код до аналогичной структуры для v2 API, но все еще не смог ее разрешить.

 request.post('https://content.dropboxapi.com/2/files/upload/', {
                headers: {
                    Authorization: 'Bearer TOKEN',
                    'Dropbox-API-Arg': {"path": "/Homework","mode": "add","autorename": true,"mute": false},
                    'Content-Type': 'application/pdf'
                    //'Content-Type': 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
                },
                body: content
            } .... similar code
 Greg29 сент. 2017 г., 19:55
API v2 работает иначе, чем API v1. Например, путь к файлу не передается по самому URL-адресу, поэтому вам необходимо обновить код, чтобы использовать стиль API v2. Вот пример в документации:dropbox.com/developers/documentation/http/... Также убедитесь, что вы проверяете тело ответа на наличие ошибок.
 Greg29 сент. 2017 г., 22:05
В любом случае проверьте ответ тела. Должно быть более полезное сообщение об ошибке.
 Greg29 сент. 2017 г., 22:04
Это выглядит ближе, но все равно не соответствует документации. Например, вы должны установитьContent-Type вapplication/octet-stream.
 Skywalker29 сент. 2017 г., 21:48
@ Грег, пожалуйста, смотрите мой обновленный вопрос.
 Skywalker29 сент. 2017 г., 22:06
@Greg Я пытался использовать тип контента octet-stream, но безуспешно. Также это не дает мне никакого сообщения об ошибке. Должна быть ошибка, которую я где-то совершаю.

Ответы на вопрос(2)

который абстрагируется от аутентификации.CloudRail для Node.js может быть очень полезным здесь. Он довольно прост в использовании и работает и для других провайдеров, таких как OneDrive.

const cloudrail = require("cloudrail-si");

const service = new cloudrail.services.Dropbox(
    cloudrail.RedirectReceivers.getLocalAuthenticator(8082),
    "[Dropbox Client Identifier]",
    "[Dropbox Client Secret]",
    "http://localhost:8082/auth",
    "someState"
);

service.upload(
    "/myFolder/myFile.png",
    readableStream,
    1024,
    true,
    (error) => {
        // Check for potential error
    }
);

Здесь такжекороткая статья о проблеме {«error»: «v1_retired»}.

которые скрывают абстракцию процесса аутентификации и т. Д. Под капотом.

Проверьте официальныйраздаточная-СДК-JS или попробуйте мой крошечный пакетраздаточная-v2-апи, Быстрый пример:

const dropboxV2Api = require('dropbox-v2-api');

//create session
const dropbox = dropboxV2Api.authenticate({
    token: 'TOKEN HERE'
});

//create upload stream
const uploadStream = dropbox({
    resource: 'files/upload',
    parameters: {
        path: '/dropbox/path/to/file.txt'
    }
}, (err, result) => {
    // upload completed
});

//use nodejs stream
fs.createReadStream('path/to/file.txt').pipe(uploadStream);

Ваш ответ на вопрос