2014-09-22 29 views
5

yılında devam ettirilebilir İndir Uygulama:nasıl bir dosyayı zorla indirmek için <a href="http://silex.sensiolabs.org/doc/usage.html#sending-a-file" rel="nofollow noreferrer">silex</a> yılında Silex'deki

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(); 

Bu daha küçük dosyalar için iyi çalışır. Ancak kullanım durumum, bir indirme yöneticisi tarafından duraklatılabilen/yeniden başlatılabilen büyük bir indirme gerektirir.

Dosya streaming ile ilgili bir örnek var, ancak aradığım şey gibi görünmüyor. Biri bunu daha önce mi yaptı? Ben sadece answer from here kullanabilir ve onunla yapılabilir. Ama bunu yapmanın silexy yolu varsa güzel olurdu.

+0

Silex HTTP'nin çekirdeği Symphony bileşenlerine dayanıyorsa, sorunuzu okuyucunun sayısını genişletmek için [tag: symfony] 'i eklemelisiniz – Fractaliste

+0

Bir şey buldum (Symfony Components/Silex ile yazılmadım) ama işe yaramış gibi görünüyor .. https: //gist.github.com/kosinix/4cf0d432638817888149 – ohartl

+0

@ohartl - Bu gist :-) yazdım :-) – kosinix

cevap

0

Sürücüde bir dosyanız varsa, onu uygulamak oldukça önemsizdir. Tablodan kayıtlar yazmak gibi.

Başlıkları okuyun, dosyayı açın, istenen pozisyonu arayın ve istenen boyutu okuyun.

Sadece & yanıtından başlıklar hakkında biraz bilgi sahibi olmanız yeterlidir.

sunucu kabul ediyor mu aralıkları:

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

HTTP içerik aralıkları için 206 durum: İçerik aralığı başlıkları hakkında

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

Bilgi:

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

İlgili konular