Widoki multimediów jest przestarzałe od wersji 2.3. Zamiast tego należy użyć Sending files.
Sprawdź ten minimalny przykład w kontrolerze:
public function download($id) {
$path = $this->YourModel->aMagicFunctionThatReturnsThePathToYourFile($id);
$this->response->file($path, array(
'download' => true,
'name' => 'the name of the file as it should appear on the client\'s computer',
));
return $this->response;
}
Pierwszy parametr $this->response->file
jest w stosunku do katalogu APP
. Dlatego wywołanie $this->response->file('someFolder' . DS . 'someFile.zip')
spowoduje pobranie pliku APP/someFolder/someFile.zip
.
"Wysyłanie plików" wymaga co najmniej wersji CakePHP w wersji 2.0. Proszę również rozważyć spojrzenie na link Książka kucharska powyżej.
Jeśli używasz starszej wersji CakePHP należy użyć mediów Wyświetleń jak już wspomniano w swoim pytaniu. Użyj tego kodu i zapoznaj się z Media Views (Cookbook).
Oto ta sama metoda dla starszych wersjach:
public function download($id) {
$this->viewClass = 'Media';
$path = $this->YourModel->aMagicFunctionThatReturnsThePathToYourFile($id);
// in this example $path should hold the filename but a trailing slash
$params = array(
'id' => 'someFile.zip',
'name' => 'the name of the file as it should appear on the client\'s computer',
'download' => true,
'extension' => 'zip',
'path' => $path
);
$this->set($params);
}
Jeśli używasz Apache, można wymusić pobieranie przez dodanie '.htaccess' wewnątrz katalogu„Pobierz”. Zobacz przykłady: http://www.givegoodweb.com/post/30/forcing-a-download-with-apache-and-htaccess i http://www.timewasters-place.com/how-to-force -file-pobieranie-z-htaccess/W ten sposób nie musisz podawać plików do pobrania przez PHP – thaJeztah
Co powiesz na umieszczenie ich w APP_DIR/webroot/someFolder /? – SaidbakR
@ sємsєм Masz rację (nie zauważyłem, że pliki nie znajdowały się wewnątrz webroota). Chociaż umieszczenie ich tylko w publicznym katalogu nie spowoduje automatycznie ich pobrania (np. Jeśli plik jest plikiem JPG). Dodanie pliku .htaccess, który wysyła nagłówki "download", ułatwi ludziom "pobieranie" plików zamiast * oglądania * ich w przeglądarce. Chociaż można to zrobić, przeglądając PHP (patrz odpowiedź poniżej), nie zawsze jest to idealne rozwiązanie, szczególnie w przypadku dużych plików. – thaJeztah