2017-09-29 7 views
0

Je voudrais télécharger le fichier à partir du serveur NAS distant, je ne suis pas en mesure de forcer le téléchargement au client. J'utilise cette fonction:Comment servir un fichier distant en téléchargement avec CakePHP 3?

public function download(){ 
    // Set IP and port 
    define("FTP_CONNECT_IP", "xxx"); 
    define("CONNECT_PORT", "21"); 

    // Set username and password 
    define("FTP_LOGIN_USER", "username"); 
    define("FTP_LOGIN_PASS", "password"); 
    $remote_file = 'ftp://' . FTP_LOGIN_USER . ':' . FTP_LOGIN_PASS . '@' . FTP_CONNECT_IP . '/' .'PathToFile.avi'; 
    $response = $this->response->withFile($remote_file,['download' => true]); 
    return $response; 

    } 

Il commence à lire quelque chose mais jamais navigateur me demande le téléchargement. S'il vous plaît Quel est le problème?

Répondre

1

Vous ne pouvez pas utiliser Response::withFile() pour les fichiers distants, cela ne fonctionne qu'avec les fichiers locaux. Si vous souhaitez diffuser des fichiers distants, vous devez les stocker temporairement sur votre serveur ou créer une réponse de téléchargement appropriée, en utilisant par exemple le flux de rappel CakePHPs pour que le corps de la réponse produise les données manuellement.

Voici un exemple rapide (ne prend pas en charge les demandes de plage):

return $this->response 
    ->withType(pathinfo($remote_file, \PATHINFO_EXTENSION)) 
    ->withDownload(basename($remote_file)) 
    ->withLength(filesize($remote_file)) 
    ->withBody(new \Cake\Http\CallbackStream(function() use ($remote_file) { 
     ob_end_flush(); 
     ob_implicit_flush(); 
     readfile($remote_file); 
    })); 

Voir aussi

+0

merci beaucoup, cela m'a beaucoup aidé. – Stefan