2

ValumnsFileUploaderを使用してファイルをdjangoにロードしています。これは、最新のブラウザーではajaxアップロードをサポートし、XHRIEなどの古いブラウザーではiFrameフォールバックをサポートします。

ここで問題が発生します。大きなファイルをアップロードすると、iFrameアップロードのみが機能します。これは、ファイルがマップされrequest.FILES、djangoがメモリではなくディスクにすぐに書き込むためです。

アップロードを使用する場合XHR、request._raw_post_dataを読み取り、これをディスクに書き込む必要がありますが、。で失敗しますMemoryError

これは私のファイルアップローダーの初期化です:

var uploader = new qq.FileUploader({
    'action': uploadUrl,
    'multiple': true,
    'allowedExtensions': allowedExtensions,
    'element': selector,

    'debug': true,

    'onComplete': completeFunction,
    'onProgress': progressFunction,
    'onSubmit': submitFunction
});

djangoの最後で、次のコードを使用してファイルの内容をディスクに書き込みます。

# open a new file to write the contents into
new_file_name = str(uuid.uuid4())
destination = open(upload_path + new_file_name, 'wb+')

# differentiate between xhr (Chrome, FF) and pseudo form uploads (IE)
if len(request.FILES) > 0: # IE
    for chunk in request.FILES[0].chunks():
        destination.write(chunk)

else: # others
    destination.write(request._raw_post_data)
destination.close()

Alex Kuhlからこのソリューションも試しましたが、これはで失敗しますIOError: request data read error

XHRを介してファイルをアップロードしrequest.FILES、djangoの組み込み処理を使用する方法はありますか?

4

0 に答える 0