0

andを使用してファイルをアップロードするno javascriptコードを作成しました。ファイルを選択するための要素を使用します。ボタンをクリックすると、ファイルは問題なくアップロードされます。djangoビューはからファイルを取得できますhtml formdjango viewhtml5 inputsubmitrequest.FILES

def upload_file(request,template_name):
    to_return = {}
    store_message="failure"
    if request.method == 'POST':
        if request.FILES.has_key('fselect'):
            file = request.FILES['fselect']
            with open('/uploadpath/%s' % file.name, 'wb+') as dest:
                for chunk in file.chunks():
                    dest.write(chunk)
            store_message="success"
    to_return['store_message']= store_message
    if store_message == "failure":
        return redirect('home')
    reqctx = RequestContext(request,to_return)
    return return render_to_response(template_name,reqctx)

htmlフォームは

    <form enctype="multipart/form-data" method="post" action="{% url uploaded %}"> {% csrf_token %}
    <input type="file" name="fselect" id="fselect">    </input>
    <input type="submit" id="uploadbtn" value="upload">    
    </form>

javascriptここで、 some を使用して view を呼び出したいと思いdjangoます。アップロード ビューの ajax バージョンをコーディングしました

def ajax_upload_file(request):
    to_return = {}
    store_message="failure"
    if request.method == 'POST':
        if request.FILES.has_key('fselect'):
            file = request.FILES['fselect']
            with open('/uploadpath/%s' % file.name, 'wb+') as dest:
                for chunk in file.chunks():
                    dest.write(chunk)
            store_message="success"
     to_return['store_message']= store_message
     serialized = simplejson.dumps(to_return)
     if store_message == "failure":
        return HttpResponseServerError(serialized, mimetype="application/json")
     else:
        return HttpResponse(serialized, mimetype="application/json")

fileオブジェクトをjavascriptコードから django ビューに渡す方法について混乱しています。

JavaScriptコード

$(document).ready(function(){
  $('#fselect').change(function(){uploadFile()});

}
function uploadSubTitleFile(){
    //check if it is a subtitle file?
    var file=document.getElementById('fselect').files[0];
    var data = {  };//how to pass the data
    var args = { type:"POST", url:"ajax_upload/", data:data, complete:done };    
    return;
}
4

1 に答える 1

1

簡単な答えとして、そうではありません。フォームを非表示の iframe に送信し、javascript がその親ウィンドウを呼び出せるようにします。

ファイルのアップロードは iframe を介して行われるため、HTTP ステータス コードなどの従来の応答データを直接利用することはできず、接続マネージャーは (トランザクション タイムアウトを除いて) 成功または失敗を合理的に識別することができません。代わりに、コールバックのアップロード ハンドラは、トランザクションが完了すると、iframe ドキュメントの本文を含む応答オブジェクトを文字列として受け取ります。

http://developer.yahoo.com/yui/connection/#upload

私のアドバイスは、あなたのためにそれを行う適切なライブラリを見つけて使用することです:

最近のブラウザーでは、iframe に依存せずにそれを行うことが可能です: Sending multipart/formdata with jQuery.ajax

于 2012-05-17T15:44:42.760 に答える