2015-12-11 3 views
0

Моя текущая цель - написать функцию, которая позволяет мне возвращать метаданные файла с сервера Dropbox с использованием его API. Хотя мне удалось загрузить файлы и создать листинг, у меня проблемы с загрузкой. Поток идет следующим образом:
1.) Пользователь нажимает на файл, который вызывает window.location на путь к файлу
2.) Это вызывает путь dbDownloadFile с пути загрузки.
3.) Который по очереди вызывает клиента Dropbox и использует метод getbox getbox.

Загрузка файла с сервера 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; 
    } 

ответ

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

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

Смежные вопросы