Django ajaxuploader 400 ошибка плохого запроса
Submitted.html JS также окружен функцией document.ready
var uploader = new qq.FileUploader({
action: "{% url 'QCOMLTE:imager' %}",
element: $('#file-uploader')[0],
multiple: true,
onComplete: function(id, fileName, responseJSON) {
if(responseJSON.success) {
alert("success!");
} else {
alert("upload failed!");
}
},
onAllComplete: function(uploads) {
// uploads is an array of maps
// the maps look like this: {file: FileObject, response: JSONServerResponse}
alert("All complete!");
},
params: {
'csrf_token': "{{ csrf_token }}",
'csrf_name': 'csrfmiddlewaretoken',
'csrf_xname': 'X-CSRFToken'
}
});
в другом месте в теле HTML
<div id="file-uploader">
<noscript>
<p>Please enable JavaScript to use file uploader.</p>
</noscript>
</div>
urls.py
urlpatterns = patterns('',
url(r"^Submitted/$", views.HybridDetailView.as_view(), name='Submitted'),
url(r'^(?P<object_type>\w+)/process/$', views.process, name='process'),
url(r'^(?P<object_type>\w+)/$', views.generic_view, name='generic'),
url("$^", views.head, name='head'),
url("uploader", views.upload, name= 'imager'),
)
views.py
@AjaxFileUploader
def upload(request):
response = {'files': []}
script_dir = os.path.dirname(__file__)
# Loop through our files in the files list uploaded
print('request',request)
print(request.FILES)
for item in request.FILES.getlist('files[]'):
file = UploadedFile(item)
with open(script_dir + '/Excel/' + file.name) as destination:
for chunk in file.chunks():
destination.write(chunk)
response['files'].append(file)
print('appended')
return HttpResponse(json.dumps(response), content_type='application/json')
также содержит "ajaxuploader" в списке установленных приложений
Когда я пытаюсь отправить файл через кнопку, он отправляет пост-вызов, но получает ошибку 400 (BAD REQUEST). Насколько я могу судить, он даже не доходит до питона, по крайней мере, от кода представления. Кажется, правильно сформировать URL запроса
http://localhost:8000/QCOMLTE/uploader?qqfile=powered_by.png
И когда вы переходите по URL, он отправляет сообщение о том, что почтовые звонки разрешены только. Это похоже на Default django-ajax-uploader с бэкендом s3, выдает ошибку MalformedXML За исключением того, что я не использую никаких бэкэндов, просто пытаюсь получить файл / ы и сохранить их в каталоге.
ОБНОВЛЕНИЕ 25.08.14: Убрал декоратор из вида. Это приводит к тому, что ошибка не отправляется. После печати запроса становится очевидным, что файл отправляется по пути GET вместо пути FILE. Я не знаю, как это изменить.
1 ответ
После нахождения этого нужен минимальный пример загрузки файла Django
Я пытался подражать ему и обнаруживал, что запросы FILE и POST фактически выполняются, в отличие от ajax/jquery, который я использовал. JQuery был
$('#uploadform').submit(function (e){
console.log('submitting')
var data = new FormData($('#uploadform').get(0));
$.ajax({
type: 'POST',
url: "{% url 'QCOMLTE:imager' %}",
data: data,
success: function(data){console.log(data)},
error: function(data){console.log(data)},
cache: false,
processData: false,
contentType: false
});
e.preventDefault()
});
кроме типа был ниже URL. Я попытался изменить его на запрос $.post, и тогда он пытался отправить по неправильному URL-адресу... Поэтому я решил изменить его обратно, и на этот раз поместил тип в начале вызова ajax. Это тогда работало... и все еще делает после большого тестирования.