Django - 边学Django边写毕业设计(day20 文件)

2021.10.13

很明显,我懒了,拖到今天才写文件上传,先阅读一下文档,有用的东西会贴过来。

1.文件上传

upload_to也可以是函数,这样就可以自定义存储路径了。
我希望每个项目的文件都放在各自的文件夹里。
在这里插入图片描述

  1. file = request.POST.get(‘name’),根据input的name属性获取文件。
  2. file.name 获取图片名称
  3. file.size 获取图片大小(单位:b)
  4. 生成form表单实例时,不只是要传request.FILES,还有request.POST。
FileForm(request.POST, request.FILES)
  1. 实现下载功能,只需要在a标签添加一个download=“下载到哪个路径(包括文件名)”,href是访问media_url+文件相对路径的地址。
    如下:media_url 是 设置里配置的/media/,我导入settings到视图函数中,将它传到html。
    file.file_path是数据库存的文件相对路径(包括文件名)
    file.file_name就是下载下来的文件名
href="{{ media_url }}{{ file.file_path }}" download="{{ file.file_name }}"
  1. 删除文件,不仅要删除数据库的数据,还要删除文件夹里的文件。
    找到删除的路径:从settings里引入MEDIA_ROOT,用os.path.join(MEDIA_ROOT,file.file_path.name)将文件完整路径拼接。这里的file是查找出来的数据。这里的file_path并非路径,file_path是个对象,想要获取它的文件相对路径,要用.name获取。
    然后用os.remove(文件绝对路径)删除,再删除数据库的数据。

  2. 用JQuery阻止表单提交,因为我想限制超过1M的文件不能上传。

toFixed(2) 是保留两位小数

preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交)。

最后加个location.href=location.href 刷新一下,不然阻止表单提交后,不刷新就无法再次提交,会一直提示超过1M。

<script>
    $(function (){
        fileLimit();
    })
    function fileLimit(){
        $('#btnUpload').click(function (){
            var max_size = 1024;
            var file_size_b = document.getElementById('id_file_path').files[0].size;
            var file_size_kb = (file_size_b/1024).toFixed(2);
            if(file_size_kb > max_size){
                $('#file_form').submit(function (e){
                    e.preventDefault();
                    alert("文件大小不能超过1M");
                    location.href = location.href;
                })
            }
        })
    }

    </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值