Есть ли способ загрузить файл, пока он загружается, без разбивки файла? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть требование об отправке файла в TCP-соединение во время его загрузки из inte rnet с использованием Curl. Часть файла, которая была загружена, должна быть автоматически отправлена ​​во время ожидания остальной части файла, то есть файл одновременно загружается из inte rnet и отправляется в сокет tcp. Я знаю размер файла заранее и не хочу разбивать файлы на более мелкие сегменты. Есть ли другой путь? Я использую python для этого сценария.

EDIT

Рассмотрим следующий код:

import os
import socket

ip = getOwnIp()
tcpPort = 8888

fileLink = "https://download.ccleaner.com/ccsetup563.exe"
os.system('curl -L -o ccleaner.exe ' + fileLink)

tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverAddress = (ip, tcpPort)
tcpSock.bind(serverAddress)
tcpSock.listen(1)

while(true):
    connection, clientAddress = tcpSock.accept()
    sendFile(connection)

В настоящее время загружается ccleaner.exe. До окончания загрузки скрипт должен начать отправку байтов, которые были загружены, в «соединение».

Как реализовать функцию 'sendFile ()'?

Чтение файла и отправка не являются проблемой. Реальная проблема заключается в том, что файл (ccleaner.exe) является неполным на данный момент. Таким образом, количество данных, которые были загружены до сих пор, будет отправлено, и функция вернется.

Как заставить функцию sendFile () отправлять данные в «соединение», как только поступают новые данные для « ccleaner.exe 'и затем дождитесь данных, пока весь файл не будет загружен.

...