Моя текущая цель — написать функцию, которая позволит мне возвращать метаданные файла с сервера Dropbox, используя его API. Хотя я смог загрузить файлы и создать список, у меня возникли проблемы с загрузкой.
Поток идет следующим образом:
1.) Пользователь нажимает на файл, который вызывает window.location к filepath
2.) Это вызывает dbDownloadFile с путем загрузки.
3.) Который в свою очередь вызывает клиент dropbox и использует метод getFile dropbox.
Я создал поток с выходом php: // и надеялся, что клиент dropbox запишет туда файл, но это создает некоторые странные проблемы на этом пути. Во-первых, я могу получить только частичную загрузку файла, или файл может быть поврежден. В случае html-файла, который я пытался загрузить, он не работал вообще, поскольку загруженный мною файл не передавался полностью и всегда заканчивался строкой, которая выглядит как ‘string (7) «getfile»‘ и другими проблемами. , Это проблема с тем, как я создаю этот файловый поток? Спасибо.
dropbox_text.php
window.location="download.php?filepath="+r[0]; //r[0] is the path
download.php
$dbcon->dbDownloadFile($download_path);
controller.php
public function dbDownloadFile($filepath) {
$path_parts = pathinfo($filepath);
$extension = $path_parts['extension'];
$filename = $path_parts['filename'].'.'.$extension;
$at = $this->getAuthToken();
$dbxClient = $this->createDropboxClient($at);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
$f = fopen('php://output', "w");
//$f = tmpfile();
$metaData = $dbxClient->getFile($filepath, $f);
ob_clean();
flush();
sleep(1);
fclose($f);
//return $f;
}
public function dbDownloadFile($filepath) {
$path_parts = pathinfo($filepath);
$extension = $path_parts['extension'];
$filename = $path_parts['filename'].'.'.$extension;
$at = $this->getAuthToken();
$dbxClient = $this->createDropboxClient($at);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Expires: 0');
header('Pragma: public');
$f = fopen('php://output', "w");
$metaData = $dbxClient->getFile($filepath, $f);
flush();
sleep(1);
fclose($f);
}
Я думаю, что контроль кеша вызвал проблемы. Он записал определенные строки в верхнюю часть файла, что привело к неправильной визуализации. Если кто-то может помочь мне уточнить, так как я не эксперт, это было бы потрясающе.
Других решений пока нет …