Django如何在内存里处理ajax传递进来的Excel文件?

新手上路,请多包涵

希望通过ajax从页面上传一些字段和一个excel文件进行处理

前端部分是这样写的

<form method="post">
    {% csrf_token %}
    <input class='a' type="text">
    <input class="up-files" type="file">
    <button class="up-btn">提交</button>
</form>

#js 部分
<script>
$('.wage-add-btn').click(function () {
         $.ajaxSetup({
     data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
    });
         if(confirm("请仔细检查表格确认上传")) {
             var a = $('.a').val();
             var files = $('.up-files').val();
             $.ajax({
                type:"POST",
                data: {a:a, files:files},
                url: "{% url 'add' %}",
                cache: false,
                dataType: "html",
                success: function(){
                    alert('成功')
                },
                error: function(){
                    alert('失败')
                }
            });
            return false;
         }
    });

</script>


views.py:

def add(request):

if request.method == 'POST':
    if request.is_ajax():
        a = request.POST.get('a')
        files = request.POST.get('files')
        data = xlrd.open_workbook(files)
return render(request, 'index.html', locals())

这里报错:
IOError: [Errno 2] No such file or directory: u'C:\fakepath\u5956u54c1u53d1u653eu767bu8bb0u886835.xls'

请问是哪里操作不对吗?是否有完整的实现可以借鉴?

阅读 2.8k
3 个回答
新手上路,请多包涵

文件是通过request.FILE传输,不是通过POST

前端的ajax写的不对,file的上传要借助formData,


<form method="post">
{% csrf_token %}
<input class='a' type="text">
<input class="up-files" type="file">
<button class="up-btn">提交</button>

</form>

js 部分

<script>
$('.wage-add-btn').click(function () {

     $.ajaxSetup({
 data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});
     if(confirm("请仔细检查表格确认上传")) {
         // var a = $('.a').val();
         // var files = $('.up-files').val();
         var form = new FormData();
         form.append("file", files);
         form.append("a", a);
         $.ajax({
            type:"POST",
            data: form,
            url: "{% url 'add' %}",
            cache: false,
            dataType: "html",
            success: function(){
                alert('成功')
            },
            error: function(){
                alert('失败')
            }
        });
        return false;
     }
});

</script>

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题