Django的AJAX文件上传 [英] Django ajax file upload
本文介绍了Django的AJAX文件上传的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
,所以我想上传一个文件,而无需任何外部插件,但我遇到了一些错误。
So i am trying to upload a file without any external plugins, but i am running into some errors.
<form method="" action="" name='upload_form' id='upload_form' >
{% csrf_token %}
<input type='file' name='file' id='file' />
<input type='button' value='Upload' id='upload'/>
</form>
<script type='text/javascript'>
$(document).ready(function() {
var csrf_token = $('input[name="csrfmiddlewaretoken"]').val();
$('#upload').click(function() {
$.ajax({
csrfmiddlewaretoken: csrf_token,
type: 'POST',
url : 'upload',
enctype: "multipart/form-data",
data : {
'file': $('#file').val()
},
success: function(data) {
console.log(data)
}
})
})
})
</script>
我的服务器:
my server :
class ImageUploadView(LoginRequiredMixin, JSONResponseMixin, AjaxResponseMixin, CurrentUserIdMixin, View):
@method_decorator(csrf_protect)
def dispatch(self, *args, **kwargs):
return super(ImageUploadView, self).dispatch(*args, **kwargs)
def post_ajax(self, request, username):
print request.POST.get('file', None)
print request.FILES
# id = request.POST['id']
# path = 'pictures/'
# f = request.FILES['picture']
# destination = open(path, 'wb+')
# for chunk in f.chunks():
# destination.write(chunk)
# destination.close()
return HttpResponse("image uploaded")
我收到了&LT; MultiValueDict:{}&GT;
的request.FILES
i get a <MultiValueDict: {}>
for the request.FILES
我如何正确获取上传的文件,现在我的code?
how do i properly get the uploaded file now with my code?
推荐答案
下面是我用它来上传使用JavaScript文件,希望这有助于!只需通过你的$('#文件')作为参数。
Here is what I use to upload files using javascript, hope this helps ! Just pass your $('#file') as a parameter.
function upload(field, upload_url) {
if (field.files.length == 0) {
return;
}
file = field.files[0];
var formdata = new FormData();
formdata.append('file_upload', file);
$.ajax({
url: upload_url,
type: 'POST',
data: formdata,
processData: false,
contentType: false,
success: console.log('success!')
});
}
这是我做的服务器端(简体):
And this is what I do on the server side (simplified):
def save_file(dest_path, f, filename):
original_name, file_extension = os.path.splitext(f.name)
filename = filename + '-' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + file_extension
url = '/' + dest_path + '/' + filename
path = django_settings.MEDIA_ROOT + url
destination = open(path, 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
return path
class FileUploadView(View):
def post(self, request, *args, **kwargs):
if request.FILES and request.FILES.get('file_upload'):
path = save_file(UPLOAD_TO,
request.FILES.get('file_upload'),
FILENAME)
return self.render_to_response({})
这篇关于Django的AJAX文件上传的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文