PHP & amp; API Dropbox - ошибка Неустранимая ошибка: Uncaught Dropbox \ Exception_BadRequest: статус HTTP 400 {& ldquo; ошибка & rdquo ;: & ldquo; v1_retired & rdquo;}

Какой серверный язык вы используете? В моем приложении я могу легко загрузить файл из вызова AJAX, установив правильные заголовки в ответе PHP:

Настройка заголовков на стороне сервера

header("HTTP/1.1 200 OK");
header("Pragma: public");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

// The optional second 'replace' parameter indicates whether the header
// should replace a previous similar header, or add a second header of
// the same type. By default it will replace, but if you pass in FALSE
// as the second argument you can force multiple headers of the same type.
header("Cache-Control: private", false);

header("Content-type: " . $mimeType);

// $strFileName is, of course, the filename of the file being downloaded. 
// This won't have to be the same name as the actual file.
header("Content-Disposition: attachment; filename=\"{$strFileName}\""); 

header("Content-Transfer-Encoding: binary");
header("Content-Length: " . mb_strlen($strFile));

// $strFile is a binary representation of the file that is being downloaded.
echo $strFile;

Это будет фактически «перенаправление 'браузер на эту страницу загрузки, но, как сказал @ahren alread в своем комментарии, он не будет перемещаться от текущей страницы.

Все дело в настройке правильных заголовков, поэтому я уверен,

Обращение с клиентской стороной ответа

Предполагая, что вы уже знаете, как сделать вызов AJAX, вы можете найти подходящее решение для серверного языка, который вы используете, если это не PHP. на стороне клиента вы выполняете запрос AJAX на сервер. Затем сервер генерирует ссылку, с которой можно загрузить этот файл, например. URL 'forward', на который вы хотите указать. Например, сервер отвечает:

{
    status: 1, // ok
    // unique one-time download token, not required of course
    message: 'http://yourwebsite.com/getdownload/ska08912dsa'
}

При обработке ответа вы вводите iframe в своем теле и устанавливаете SRC iframe в URL, который вы только что получили (например, используя jQuery для удобства этого примера):

$("body").append("<iframe src='" + data.message +
  "' style='display: none;' ></iframe>");

Если вы установили правильные заголовки, как показано выше, iframe заставит диалоговое окно загрузки, не переведя браузер с текущей страницы.

Примечание

Дополнительное дополнение по отношению к вашему вопросу; Я думаю, что лучше всегда возвращать JSON при запросе материала с помощью технологии AJAX. После того, как вы получили ответ JSON, вы можете решить, на какой стороне клиент, что с ним делать. Возможно, например, в дальнейшем вы хотите, чтобы пользователь нажал ссылку для загрузки на URL, а не на прямое скачивание, в вашей текущей настройке вам нужно будет обновить как клиент, так и серверную сторону, чтобы сделать это.

0
задан 17 January 2019 в 00:44
поделиться

1 ответ

Ошибка v1_retired указывает на то, что вы вызываете устаревший API Dropbox v1 . Вместо этого вам следует использовать Dropbox API v2 .

Ничего не устанавливается, когда вы указываете «2. *» для этой библиотеки, потому что нет версии v2 .

Dropbox не предлагает официальный PHP SDK для Dropbox API v2, но вы можете использовать стороннюю библиотеку , или вы можете назвать конечные точки HTTPS сами .

0
ответ дан Greg 17 January 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: