如果文件足够小,服务器会成功接收文件。否则,它返回错误“ Request Entity Too Large Error 413
”。这不是我的服务器,所以我无法直接处理它。
我很确定它取决于Content-Length
http 标头(事实上,如果重要的话,这是https连接)。
conn = httplib.HTTPSConnection("www.site.com")
conn.connect()
conn.putrequest("POST", path)
conn.putheader("Content-Type", "some type")
conn.putheader("Content-Length", str(os.path.getsize(file_name)))
conn.endheaders()
即使我尝试为大文件(太大)逐块发送文件
chunk_size = 1024
while True:
try:
chunk = f.read(chunk_size)
if not chunk:
break
conn.send(chunk)
except Exception as e:
break
它失败了,而在小文件上它运行良好。
如果我手动使 Content-Type 更小,它似乎(!)可以工作,至少Request Entity Too Large Error 413
来自服务器的“”错误消失了。但它不能完全工作,因为文件(即音频文件)的格式可能会以这种方式被破坏,并且服务器根本无法通过说(“文件格式错误”)来处理该文件:
fake_total_size = 1024*10 # it's smaller than a real file size for sure
conn.putheader("Content-Length", str(fake_total_size))
f = open(file_name)
chunk_size = fake_total_size
chunk = f.read(chunk_size)
conn.send(chunk)
我做错了什么以及如何解决?
我猜它必须以正确的 Content-Length 值处理以可接受大小的某些部分读取和发送大文件?或者流式上传,也许?