Jak streamujete velké ZIP archivy?
- sidrach
- Člen | 23
Zdravím, druhý den se potýkám s následujícím problémem, který tu už určitě někdo řešil.
Situace: Máte 639 originálů fotografií v albu, které chcete předat formou ZIP archivu ke stažení uživateli. Celková velikost po zabalení je cca 1.3GB.
Vytvářet archiv v paměti je no-way a generovat to na disk je na dlouho a zabere to zbytečně moc místa. Takže archiv je nutno streamovat.
Zkoušel jsem třídy:
- maenchen/zipstream-php – streamuje v poho, ale jen do cca 1.2GB, pak neočekávaný eof.
- mcnetic/zipstreamer – to samé
- phpzip/phpzip – streamuje celý archiv, ale stejně hlásí archiv neočekávaný eof.
- grandt/phpzipmerge – vyžaduje fotky nejdřív jednotlivě nebo ve skupinách zabalit (prasárna) a pak streamovat sloučený archiv, ale jako jediný funguje.
Zkoušel jsem i variantu kdy se ajaxem kvůli obejití časového limitu postupně plní archiv jednou fotkou po druhé, ale je to taky prasárna a trvá to déle než samotné stažení i v případě že se slučuje archiv bez rekomprese.
Ideální by byl nějaký download manager třeba v javě, ale chrome blokuje NPAPI, takže to taky přestává být použitelné. Moc mě nenapadá jak to vymyslet.
- newPOPE
- Člen | 648
- Urobil by som button na download
- Zostavim archiv na disku (asynchronne)
- Poslem userovi link na download (z nejakym divnym nazvom) a o prenos sa postara web server alebo nejaky cloud napr. S3.
Plus este nejaka invalidacia (mazanie) archivov po danom case.
Editoval newPOPE (10. 7. 2015 14:13)
- sidrach
- Člen | 23
To jsem zkoušel a je to funkční možnost, ale vadí mi tam ta nutnost ukládat 2× skoro 1.3GB. Jednou ve fotkách ze kterých se generují zmenšeniny atd. a podruhé v archivech, které musím cronem jednou za čas mazat z tempu.
Asi to vyřeším rozdělením na více archivů streamovaných současně, nebo začnu hledat bug který rozsypává ty soubory. Pod 1.2GB to funguje v pohodě.