2014-09-22 13 views
5

W silex mogę to zrobić, aby wymusić pobranie pliku:Jak wdrożyć wznawiania Pobierz w Silex

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\HttpFoundation\ResponseHeaderBag; 

$app = new Silex\Application(); 

// Url can be http://pathtomysilexapp.com/download 
$app->get('/download', function (Request $request) use ($app) { 
    $file = '/path/to/download.zip'; 

    if(!file_exists($file)){ 
     return new Response('File not found.', 404); 
    } 

    return $app->sendFile($file)->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'download.zip'); 
}); 

$app->run(); 

Działa to dobrze dla mniejszych plików. Jednak mój przypadek użycia wymaga pobrania dużego pliku, który może zostać wstrzymany/wznowiony przez menedżera pobierania.

Istnieje przykład pliku streaming, ale nie wydaje się to, czego szukam. Czy ktoś wcześniej to zrobił? Mógłbym po prostu użyć answer from here i zrobić z tym. Ale byłoby miło, gdyby istniał na to silexy sposób.

+0

Rdzeń Silex HTTP oparty jest na komponentach Symphony, powinieneś dodać [tag: symfony], aby rozszerzyć liczbę czytelników twojego pytania. – Fractaliste

+0

Znalazłem coś (nie napisanego z Symfony Components/Silex), ale wygląda na to, że działa. Https: //gist.github.com/kosinix/4cf0d432638817888149 – ohartl

+0

@ohartl - Napisałem to :-) – kosinix

Odpowiedz

0

Wdrożenie tego jest dość banalne, jeśli masz plik na dysku. To jest jak dzielenie stron na nagrania ze stołu.

Przeczytaj nagłówki, otwórz plik, wyszukaj żądaną pozycję i odczytaj żądany rozmiar.

Musisz tylko trochę wiedzieć o nagłówkach z prośby o odpowiedź &.

Czy serwer akceptują zakresy:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests

HTTP 206 statusu dla zakresów treści:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206

Informacje o nagłówkach Zakres treści:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range