#python #jquery #django #ajax
#python #jquery #django #ajax
Вопрос:
Я хочу загрузить свой файл с некоторыми другими атрибутами, используя AJAX
Мой код AJAX:
var file = $('#uploaded-file').get(0).files[0]
if (file != null) {
var reader = new FileReader()
reader.onload = function () {
var filedata = reader.result;
$.ajax({
url: '/upload_file',
type: 'POST',
dataType: 'json',
headers: {
'X-CSRFToken': '{{ csrf_token }}'
},
data:JSON.stringify({'data':filedata, 'name':file.name}),
success: function (response) {
console.log(response)
},
error: function (response) {
console.log(response)
}
})
};
reader.readAsArrayBuffer(file)
}
Мой Djnago view.py:
def upload_file(request):
print(json.loads(request.body))
return JsonResponse({'response':'request done'})
однако я не получаю данные файла в теле моего запроса
{'data': {}, 'name': 'abc.csv'}
чего мне здесь не хватает?
Ответ №1:
Я бы посоветовал вам использовать FormData
var file = $('#uploaded-file').get(0).files[0]
var formData = new FormData();
formData.append("file", file, file.name);
formData.append("some_other_field", 'value');
$.ajax({
url: '/upload_file',
type: 'POST',
dataType: 'json',
headers: {
'X-CSRFToken': '{{ csrf_token }}'
},
data: formData
success: function (response) {
console.log(response)
},
error: function (response) {
console.log(response)
},
contentType: false,
processData: false, // important
})
чтобы получить файл в Django:
request.FILES.getlist('file')
Комментарии:
1. request.POST.get(‘file’) просто возвращает ‘[object ArrayBuffer]’ и это только строка
2. @Hassam проверьте обновленный ответ. вы должны использовать
request.FILES
для получения файла