BG Development


  Reply to this topicStart new topicStart Poll

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



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

Мнения: 1522
Регистриран на: 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



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

Мнения: 2640
Регистриран на: 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/
---
Хора, които са прекалено умни, за да се занимават с политика, са наказани да бъдат управлявани от глупаци.
---
Life is hard; it's harder when you're stupid.
---
Black metal is like coffee. You have to learn to drink it but when you get used to it, you just want it darker and darker
PMEmail PosterUsers Website
Top
dedal
Публикувано на: 30-04-2019, 18:40
Quote Post



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

Мнения: 105
Регистриран на: 17.11.10



Аз правя така:

CODE

send_file = open(file_name,"rb")
block_read = send_file.read(1024)
while block_read:
   self.send_to(block_read)
   block_read = send_file.read(1024)
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


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