1

如果文件足够小,服务器会成功接收文件。否则,它返回错误“ Request Entity Too Large Error 413”。这不是我的服务器,所以我无法直接处理它。

我很确定它取决于Content-Lengthhttp 标头(事实上,如果重要的话,这是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 值处理以可接受大小的某些部分读取和发送大文件?或者流式上传,也许?

4

0 回答 0