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