django フォーム経由でファイルをアップロードしてから、API に送信しようとしています。
エンコーディング関数は次のとおりです。
#FYI, requestFile = request.FILES['file']
def EncodeFile(self, requestFile, fields = []):
BOUNDARY = '----------boundary------'
CRLF = '\r\n'
body = []
# Add the metadata about the upload first
for param in fields:
body.extend(
['--' + BOUNDARY,
'Content-Disposition: form-data; name="%s"' % param,
'',
fields[param],
])
fileContent = requestFile.read()
body.extend(
['--' + BOUNDARY,
'Content-Disposition: form-data; name="file"; filename="%s"'
% requestFile.name,
# The upload server determines the mime-type, no need to set it.
'Content-Type: ' + requestFile.content_type,
'',
fileContent,
])
# Finalize the form body
body.extend(['--' + BOUNDARY + '--', ''])
result = 'multipart/form-data; boundary=%s' % BOUNDARY, CRLF.join(body)
return result
問題は、「CRLF.join(body)」に到達すると、「'utf8' コーデックは位置 0 のバイト 0xff をデコードできません: 無効な開始バイト」について不平を言うことです。
requestFile が実際にはファイルへのパスであり、コンテンツを読み取る前に open(requestFile, 'rb') を実行していることを除いて、まったく同じコードがコマンド ラインから問題なく動作します。
私は一生、次に何をすべきかを理解できません。私は過去10時間ほど答えを探していました。