jquery - Django ajax jquery 文件上传

标签 jquery ajax django file-upload django-views

我的 django 项目中的文件上传有问题。所以问题是:如何通过jquery ajax将文件传递到django View ?

此时此刻我已经

脚本:

<script type='text/javascript'>
$(document).ready(function() {
    var csrf_token = $('input[name="csrfmiddlewaretoken"]').val();
    $('#upload').click(function() {
        $.ajax({
            csrfmiddlewaretoken: csrf_token,
            type: 'POST',
            url : '../ajax/upload_file/',
            enctype: "multipart/form-data",
            data  : {
                'file': $('#file').val()
            },
            success: function(data) {
                console.log(data)
            }
        })
    })
})
</script>

模板:

 <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>

查看:

@csrf_exempt
@xhr_to_json
def verifyFile(request):
    if request.is_ajax():
        file = request.FILES['file']
        return {'message': file}
    else: 
        return HttpResponseForbidden()

现在我得到

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111,      in get_response
response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py", line 77, in wrapped_view
    return view_func(*args, **kwargs)
 File "/home/vova/git/LV-  083_LAMP.git/Testcase_Project/Testcase_Project/views/decorator.py", line 6, in wrapper
   data = func(*args, **kwargs)
  File "/home/vova/git/LV-   083_LAMP.git/Testcase_Project/Testcase_Project/views/testcase.py", line 96, in verifyFile
    request.FILES['file']
  File "/usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py", line     258, in __getitem__
    raise MultiValueDictKeyError("Key %r not found in %r" % (key, self))
MultiValueDictKeyError: "Key 'file' not found in <MultiValueDict: {}>"

是否可以在没有外部库的情况下做到这一点?

最佳答案

试试这个:

def upload(request):
  id = request.POST['id']
  path = '/var/www/pictures/%s' % id
  f = request.FILES['picture']
  destination = open(path, 'wb+')
  for chunk in f.chunks():
    destination.write(chunk)
  destination.close()
  # return status to client
  ...

您可以在此处阅读完整教程:http://www.laurentluce.com/posts/upload-to-django-with-progress-bar-using-ajax-and-jquery/

关于jquery - Django ajax jquery 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15810988/

相关文章:

javascript - 无法从 jQuery 事件中调用函数

jquery - 如何将 jQuery UI 小部件与 Meteor.js 一起使用?

.net - 动态表行未通过 jquery ajax 调用更新

javascript - 如何在使用 jQuery 滚动鼠标时滚动到特定的 div?

PHP AJAX 文件上传

javascript - 如何在 jScrollPane 中获取最大滚动高度?

javascript - 将ajax jquery存储到变量中并使用该变量访问它

django - 根据对象过滤外键

python - Django 检索 S3 存储桶中的文件列表

python - PyPDF2 在打开不安全文件时是否采取任何安全措施?