BG Development


  Reply to this topicStart new topicStart Poll

> Download split files
H_A_L_F
Публикувано на: 04-02-2019, 16:24
Quote Post



Име: Антон Банчев
Група: Потребител
Ранг: Почетен член

Мнения: 1513
Регистриран на: 01.03.04



Ако имам файл качен на сървъра разделен на N парчета по 1мб как да позволя на човек да го download-не като един цял файл, без да ги merge-на на сървъра предварително?
Мислех си нещо като multiple readfile () calls, но се чудя дали ще работи и дали няма да има проблеми с memory-то ако едновременно се теглят много файлове.


Освен това PHP сървъра ще е на една машина а файловете ще се намират в amazon s3 bucket, така че няма да са локални.
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 04-02-2019, 21:42
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1912
Регистриран на: 21.02.18



QUOTE
Ако имам файл качен на сървъра разделен на N парчета по 1мб как да позволя на човек да го download-не като един цял файл, без да ги merge-на на сървъра предварително?


Много лесно. Входа/изхода са ти като тръби, които приемат непрекъснат поток от байтове. Тоест няма значение на колко парчета ти е разделен файла:


CODE
byte[] buffer = new byte[1024 * 4];
for shard in shards {
   for int bytes_read = shard.read(buffer); bytes_read > 0; bytes_read = shard.read(buffer){
       client.write(buffer, bytes_read);
   }
}



Четеш байтовете от първото парче на блокчета по 4к (примерно) и ги запращаш към клиента блокче по блокче. Като изчетеш парчето, почваш следващото по същия начин и така. Клиента изобщо не знае и не му пука как ти е разделен файла от заде.

Нищо не държиш в паметта освен малък буфер. Тоест максималния брой файлове които могат да се прехвърлят паралелно ти е ограничен от към памет по следния начин: used_memory = buffer_size * parallel_downlaods

Това мнение е било редактирано от Gamma Goblin на 04-02-2019, 21:42


--------------------
https://www.rust-lang.org/
---
Недобросъвестните оратори се опитват да изкарат лошото добро.
---
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0