2021.10.13
很明显,我懒了,拖到今天才写文件上传,先阅读一下文档,有用的东西会贴过来。
1.文件上传
upload_to也可以是函数,这样就可以自定义存储路径了。
我希望每个项目的文件都放在各自的文件夹里。
- file = request.POST.get(‘name’),根据input的name属性获取文件。
- file.name 获取图片名称
- file.size 获取图片大小(单位:b)
- 生成form表单实例时,不只是要传request.FILES,还有request.POST。
FileForm(request.POST, request.FILES)
- 实现下载功能,只需要在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 }}"
-
删除文件,不仅要删除数据库的数据,还要删除文件夹里的文件。
找到删除的路径:从settings里引入MEDIA_ROOT,用os.path.join(MEDIA_ROOT,file.file_path.name)将文件完整路径拼接。这里的file是查找出来的数据。这里的file_path并非路径,file_path是个对象,想要获取它的文件相对路径,要用.name获取。
然后用os.remove(文件绝对路径)删除,再删除数据库的数据。 -
用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>