26 lines
750 B
Python
26 lines
750 B
Python
# Memory efficient file transfer
|
|
#
|
|
# Copyright 2021 (c) Erik de Lange
|
|
# Released under MIT license
|
|
|
|
_buffer = bytearray(512) # adjust size to your systems available memory
|
|
_bmview = memoryview(_buffer) # reuse pre-allocated _buffer
|
|
|
|
|
|
def sendfile(conn, filename):
|
|
""" Send a file to a connection in chunks - lowering memory usage.
|
|
|
|
:param socket conn: connection to send the file content to
|
|
:param str filename: name of file the send
|
|
"""
|
|
try:
|
|
with open(filename, "rb") as fp:
|
|
while True:
|
|
n = fp.readinto(_buffer)
|
|
if n == 0:
|
|
break
|
|
conn.write(_bmview[:n])
|
|
except:
|
|
print(f"WEB:File {filename} not found")
|
|
|