首页 > 其他分享 >django实现文件上传、删除、下载

django实现文件上传、删除、下载

时间:2023-04-22 11:56:05浏览次数:51  
标签:文件 form 删除 request upload django file 上传 id

django文件上传

定义一个包含FileFiled的类ModelWithFileField,其中upload字段的upload_to参数表示上传的文件存放在什么地方

class ModelWithFileField(models.Model):
    filename = models.CharField(max_length=100, verbose_name="文件名称")
    upload_date = models.DateField(verbose_name='上传日期')
    upload = models.FileField(upload_to='UPLOADFILES/')
原文链接:https://blog.csdn.net/dingrutao/article/details/116302190

定义一个form用于上传文件,form字段为FileField

class UploadFileForm(forms.Form):
    file = forms.FileField(label="选择文件")

定义一个view上传文件视图,首先实例form,返还给页面,选择一个文件,如果form判断有效则实例一个ModelWithFileField,分别保持文件和数据库

def upload_file(request):

    if request.method == "POST":
        form = UploadFileForm(request.POST, request.FILES)

        if form.is_valid():
            #获取form上传的文件
            filename = request.FILES['file'].name
            #实例化文件类
            insintanse = ModelWithFileField(upload=request.FILES['file'],filename=filename,upload_date=datetime.date.today())
            insintanse.save()


            return HttpResponse("ok")
        else:
            return render(request, "upload.html", {"form": form})
    else:
        form = UploadFileForm(request.POST, request.FILES)
    return render(request, "upload.html", {"form":form})

在urls中注册各个url

urlpatterns = [
    path('index/', views.index, name='index'),
    path("upload/", views.upload_file, name='文件上传'),
    path("delete/<int:id>", views.delete_file, name='文件删除'),
    path("download/<int:id>", views.download_file, name="下载文件")
]

文件预览

定义预览视图

def index(request):
#查询所有结果
    files = ModelWithFileField.objects.all()

    return render(request, "index.html",{
        'files':files
    })

文件删除和下载

删除视图和下载视图,通过传入id来查找文件

def delete_file(request, id):
#通过id查找到文件,删除存储文件及数据库中记录
    fileid = ModelWithFileField.objects.get(id=id)

    filepath = fileid.upload.file.name
    os.remove(filepath)
    fileid.delete()
    return HttpResponseRedirect('/loadfile/index/')


def download_file(request, id):
    filepath = ModelWithFileField.objects.get(id=id).upload.file.name
    filename = filepath.split("/")[-1]
    file = open(filepath, 'rb')
    response = FileResponse(file)
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = 'attachment;filename="{}"'.format(filename)
    return response

通过两个按钮实现文件删除,下载

<input type="button" value="删除" onclick="delete_file({{ file.id }})">
    <input type="button" value="下载" onclick="download_file({{ file.id }})">
    <script>
        function delete_file(id) {
            var r = confirm("是否删除")
            if (r == true){
                alert("已删除")
                location.href = '/loadfile/delete/' + id
            }
            else {

            }
        }

        function download_file(id) {
            location.href = '/loadfile/download/' + id
        }
    </script>

 

标签:文件,form,删除,request,upload,django,file,上传,id
From: https://www.cnblogs.com/mengdie1978/p/17342701.html

相关文章

  • django-restful:购物车 学习记录
    购物车就有获取购物车详情加入购物车删除购物记录同样直接使用mixins中的就够了view这里面没有一个陌生的基本都是前面学习过了的classShoppingCartViewset(viewsets.ModelViewSet):"""购物车功能list:获取购物车详情create:......
  • # jquery # form表单上传文件
    form表单上传文件<formaction="/upload/"method="post"enctype="multipart/form-data">头像:<inputtype="file"name="head-pic">用户名:<inputtype="text"name="username">......
  • 用 python 上传文件到微信小程序云存储
    前言小程序上了云托管后不打算继续使用其他图床,而是使用云托管自带的图床。而由于时间紧迫只能在本地使用云托管提供的服务器调用对象存储api云托管上传文件的文档在这里上传文件文档如果你上传带有中文名的文件,或者上传的路径有中文名时,需要修改一下requests库的源码,否......
  • #yyds干货盘点# LeetCode面试题:删除排序链表中的重复元素
    1.简述:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。 示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3]2.代码实现:classSolution{publicListNodedeleteDuplicates(ListNodehead){......
  • Win11 删除右键固定到开始屏幕、快速访问
    Win11删除右键"固定到开始屏幕注册表路径: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shellex\ContextMenuHandlers删除: 删除名为PintoStartscreen的项目恢复: 新建名为PintoStartscreen的项目,默认数据:{470C0EBD-5D73-4d58-9CED-E91E22E23282}Win11删除......
  • 使用 go-conntrack 包来实现 conntrack 会话的创建和删除
    packagemainimport("fmt""time""github.com/florianl/go-conntrack")funcmain(){//创建conntrack客户端client,err:=conntrack.Dial(nil)iferr!=nil{panic(err)}deferclient......
  • 删除百度云网盘和夸克网盘的右键菜单
    由于这些网盘在启动时会检测注册表,右键菜单被删了还会重新添加回来,如果你平时不用这些软件,直接卸载最好,然后可以在浏览器安装脚本网盘直链下载助手,直接通过浏览器下载。将以下内容保存进新建的del.reg文件中,然后双击运行即可,每次被重新添加的化就执行一下。WindowsRegistr......
  • Django框架——静态文件配置、form表单、request对象、连接数据库、ORM简介、ORM基本
    配置文件介绍SECRET_KEY='0yge9t5m9&%=of**qk2m9z^7-gp2db)g!*5dzb136ys0#)*%*a'#盐DEBUG=True#调试模式,等项目上线的时候,改成False#配置数据库DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3',#默认是自......
  • VUE上传图片
    1<!--2气味照相机,上传图片3-->4<template>5<divclass="main_container">6<divclass="bgimg_box":style="'background-image:url('+bgImg+');'">7<d......
  • 用C#写一个上传下载文件至OSS后返回文件路径用DES加密解密
    废话不多说,直接上代码:usingAliyun.OSS;//引入阿里云OSSSDKusingSystem;usingSystem.IO;usingSystem.Security.Cryptography;//引入.NETFramework中的加密库usingSystem.Text;publicclassOSSHelper{///<summary>///将文件上传至OSS,并使用D......