2013-12-20 6 views
1

Я отправляю файл изображения с помощью XMLHttpRequest() в моем приложении Django. Это мой сценарий:Ошибка проверки CSRF

$('#edit_user_image').change(function(){ 
    var client = new XMLHttpRequest(); 
    var file = document.getElementById("edit_user_image"); 
    /* Create a FormData instance */ 
    var formData = new FormData(); 
    /* Add the file */ 
    formData.append("csrfmiddlewaretoken", document.getElementsByName('csrfmiddlewaretoken')[0].value); 
    formData.append("upload", file.files[0]); 


    client.open("post", "/upload-image/", true); 
    client.setRequestHeader("Content-Type", "multipart/form-data; charset=utf-8; boundary=frontier"); 
    client.send(formData); /* Send to server */ 
    }); 

Это мой HTML вход:

Upload New Photo 
{% csrf_token %} 
<input id="edit_user_image" name="image" type="file" /> 

Но, когда XMLHttpRequest() сделана, это даст «проверка CSRF не удалось» ошибку, хотя я Добавление ее в данные. Может кто-нибудь сказать, что не так в сценарии.

+1

Попытка установить 'заголовок X-CSRFToken' к значению лексемы CSRF. [Документы] (https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax) –

+0

@goliney сделано, но это не помогло. – toothie

ответ

1

Вот некоторые из изменений, которые я сделал, и теперь его работает отлично:

$('#edit_user_image').change(function(){ 
    var client = new XMLHttpRequest(); 
    var file = document.getElementById("edit_user_image"); 
    var csrftoken = document.getElementsByName('csrfmiddlewaretoken')[0].value 
    /* Create a FormData instance */ 

    var params = file.files[0]; 


    client.open("post", "/upload-image/", true); 
    client.setRequestHeader("X-CSRFToken", csrftoken); 
    client.setRequestHeader("Content-Type", "multipart/form-data; charset=UTF-8; boundary=frontier"); 
    client.send(params); /* Send to server */ 
    }); 
Смежные вопросы