Django+Vue中文件的上传和下载

news2025/7/6 12:32:36

场景:上传一个源数据Excel文件,然后根据数据处理生成另外一个Excel文件并支持下载

Django:

1.首先在Django的settings.py文件中增加配置

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

2.项目的urls.py中增加

url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),

3.在APP的models.py中内容

# 文件模型
class TestTrafficFileModel(models.Model):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    upload_name = models.CharField(max_length=50, verbose_name='源数据文件名称', help_text='源数据文件名称')
    upload_file = models.FileField(upload_to='uploads/', verbose_name='上传文件路径', help_text='上传文件路径')
    handle_name = models.CharField(max_length=50, verbose_name='处理后文件名称', help_text='处理后文件名称')
    handle_file = models.FileField(upload_to='uploads/', verbose_name='数据处理文件路径', help_text='数据处理文件路径')
    upload_time = models.DateTimeField(auto_now_add=True, verbose_name='上传时间', help_text='上传时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间', help_text='更新时间')

    class Meta:
        db_table = 'test_traffic_files_storage'
        verbose_name = '测试工具文件存放表'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

4.在APP的serializers.py中的内容

class FilesSerializer(serializers.ModelSerializer):
    sheet_name = serializers.CharField(label='sheet表名', read_only=True)

    class Meta:
        model = models.TestTrafficFileModel
        fields = '__all__'
        extra_kwargs = {
            "id": {
                "read_only": True
            },
            "handle_file": {
                "read_only": True
            },
            "handle_name": {
                "read_only": True
            },
            "upload_time": {
                "format": "%Y-%m-%d %H:%M:%S"
            },
            "update_time": {
                "format": "%Y-%m-%d %H:%M:%S"
            },
        }

    def create(self, validated_data):
        instance = super(FilesSerializer, self).create(validated_data)
        # 上传源数据内的sheet表名
        instance.sheet_name = instance.upload_name.replace('_', ' ').split('.')[0]
        # 因上传后,实际表名与上传表名有区别,需将上传表名设置成实际表名
        instance.upload_name = str(instance.upload_file).split('/')[1]
        return instance

5.在APP的views.py中的内容

class DataHandleViewSet(ModelViewSet):
    queryset = models.TestTrafficFileModel.objects.all()
    serializer_class = serializers.FilesSerializer
    ordering_fields = ['id']

    def create(self, request, *args, **kwargs):
        response = super().create(request, *args, **kwargs)
        log.info(response)
        id = response.data.get('id')
        sheet_name = response.data.get('sheet_name')
        excel_name = response.data.get('upload_name')
        # 对数据做处理后返回表的title和表源数据列表
        res = handle_excel_data(file=f'media/uploads/{excel_name}',sheet_name=sheet_name)
        # 生成新的Excel后返回新的表名
        handle_file = genttle_sm_analysis_excel(*res)
        # 获取新表文件名
        handle_name = handle_file.split('/')[1]
        # 将新表文件名和文件地址写入数据库
        self.get_queryset().filter(id=id).update(handle_name=handle_name,handle_file=handle_file)
        return response

Vue前端methods内容

// 下载文件

    cellClick({ row, column, cell, event }) {

      if (column.label === '数据处理后的文件') {

        window.open(row.handle_file)

      }

    },

    // 上传文件

    uploadFile() {

      const uploadForm = new FormData() // 一个formdata

      const files = this.$refs.upload.$refs.uploadExcelForm.uploadFiles[0].raw // 获取文件数据

      const name = this.$refs.upload.$refs.uploadExcelForm.uploadFiles[0].name // 获取文件数据

      uploadForm.append('upload_file', files)

      uploadForm.append('upload_name', name)

      this.loading = true

      file_uploads(uploadForm).then(res => {

        this.loading = false

        this.uploadVisible = false

        this.getTableData()

        this.$message.success('操作成功!')

      }).catch(res => {

        this.loading = false

        this.$message.warning(res.data)

      })

    },

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

环境主题静态HTML网页作业作品 大学生环保网页设计制作成品 简单DIV CSS布局网站

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

百度智能云与实体经济“双向奔赴”: 一场1+1>2的双赢

实体经济&#xff0c;已经成为检验科技企业潜力的试金石。 在最近的财报季中&#xff0c;各家大厂的财报里“实体经济”都是关键字眼&#xff0c;已经成为各家心照不宣的共同目的地。 当然&#xff0c;条条大路通罗马。每一家的战略思路和打法都不一样。11月22日&#xff0c;…

Centos7下新硬盘的挂载操作

1、查看当前硬盘使用情况 df -h 2、 查看磁盘分配情况 fdisk -l 如图所示 vdb 磁盘 还未被使用&#xff0c;现在开始分配。 3、 磁盘分配 使用m查看详细命令&#xff0c;n添加一块新分区&#xff0c;默认最多只能有四个主分区&#xff0c;但可以通过设置将第…

Web前端开发技术课程大作业,期末考试HTML+CSS+JavaScript电竞游戏介绍网站

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

SpringCloudAlibaba全网最全讲解5️⃣之Feign(建议收藏)

&#x1f308;专栏简介 感谢阅读&#xff0c;希望能对你有所帮助&#xff0c;博文若有瑕疵请在评论区留言或在主页个人介绍中添加我私聊我,感谢每一位小伙伴不吝赐教。我是XiaoLin&#xff0c;既会写bug也会唱rap的男孩&#xff0c;这个专栏主要是介绍目前微服务最主流的解决方…

4 款适用于 Windows 的最佳免费 GIS 软件

GIS 代表地理信息系统&#xff0c;用于分析、存储、操作和可视化地图上的地理信息。GIS是一种应用广泛的软件&#xff0c;在农业、天文、考古、建筑、银行、航空等各个领域都有应用。开始这些项目&#xff0c;需要 shapefile。一些网站提供不同国家的免费 shapefile。下载免费 …

软件测试入门+面试点

前言&#xff1a;大约是2022年11月18日&#xff0c;我想学习软件测试&#xff0c;在此之前我是Java路线的&#xff0c;这不大环境的竞争激烈在加上自身的能力分析&#xff0c;我认为测试可能是我找工作路上的救赎之光&#xff0c;又恰逢这个时间点&#xff0c;留给我的时间不多…

python实现综合评价模型TOPSIS

原文&#xff1a;https://mp.weixin.qq.com/s/J9fZQ8T9TR1Ed7taPGYYjw 1 TOPSIS简介 有关综合评价的方法有多种&#xff0c; 根据赋权方法不同主要有两类&#xff1a;一类是主观赋值法&#xff0c; 如指数法、层次分析法、模糊综合评价法等&#xff1b;另一类是客观赋值法&am…

Ceph集群部署

目录 一、环境准备 1、准备4台centos服务器 2、配置ceph源 3、配置主机名解析和SSH互信 4、NTP时间同步 二、ceph集群部署 1、安装ceph组件 2、部署MON集群 3、部署OSD集群 一、环境准备 1、准备4台centos服务器 主机主机名IP备注客户端client192.168.2.10关闭selin…

中国传统节日春节网页HTML代码 春节大学生网页设计制作成品下载 学生网页课程设计期末作业下载 DW春节节日网页作业代码下载

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

常用眼底图像数据集简介及下载--糖尿病视网膜病变(Eyepacs,APTOS2019,Messdior,Messdior-2,STARE数据集)

一、糖尿病视网膜病变图像介绍 1.微动脉瘤通常出现在病变早期&#xff0c;它是由于眼部毛细血管缺氧导致血管壁变薄&#xff0c;从而在视网膜上呈现出深红色的点状物 2.出血点一般出现在血管附近&#xff0c;它是由于血管阻塞导致血液渗出形成的&#xff0c;呈现暗斑状 3.软性和…

包含min函数的栈、栈的压入弹出序列、从上往下打印二叉树、二叉搜索树的后序遍历序列

文章目录1、包含min函数的栈2、栈的压入弹出序列3、从上往下打印二叉树4、二叉搜索树的后序遍历序列1、包含min函数的栈 本题考点&#xff1a; 栈的规则性设计 牛客链接 题目描述&#xff1a; 定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈中所含最小元素的 m…

python之函数返回值传参Lambda表达式

目录 一、函数 函数与方法的区别 二、 函数返回值 三、函数传参 四、lambda表达式 一、函数 函数与方法的区别 直接调用的是函数 通过对象点出来的是方法 print("hello") a [2, 1, 3] # 对象 a.sort() print(a) 二、 函数返回值 # 返回值 def sum(*ar…

云服务器最佳实践-Linux云服务器SSH登录的安全加固

Linux云服务器常用的登录方式是SSH&#xff0c;对于密码登录方式创建的云服务器&#xff0c;如何保证登录安全性呢&#xff1f;本文以CentOS 7.6为例&#xff0c;对SSH登录进行安全加固。 修改默认端口 1、通过SSH密码方式远程登录云服务器。 2、执行以下命令&#xff0c;修改…

4-Arm PEG-N3,4-Arm PEG-Azide,四臂-聚乙二醇-叠氮一种多臂PEG衍生物

4-Arm PEG-Azide&#xff08;4-Arm PEG-N3&#xff09;一种多臂PEG衍生物&#xff0c;中文名为四臂-聚乙二醇-叠氮&#xff0c;它所属分类为Azide PEG Multi-arm PEGs。 该多臂peg衍生物的分子量均可定制&#xff1a;四臂-PEG 2000-叠氮、4-Arm PEG-N3 20000、四臂-peg 1000-叠…

linux常用服务配置、网络配置 和 基于FTP的上传和下载的几种方式

一. 网络服务配置 1. 主机名配置 hostname&#xff1a; 查看主机名 hostname xxx&#xff1a; 修改主机名(重启后无效) PS: 如果想要永久生效&#xff0c;可以修改/etc/sysconfig/network文件 2. 静态IP的配置 (1). 查看ip地址 &#xff1a; ifconfig (2). 临时修改ip地址&…

OpenCV实现文档自动矫正(含源码和测试数据)

OpenCV实现文档自动矫正&#xff08;含源码和测试数据&#xff09; 目录 OpenCV实现文档自动矫正 1. OpenCV文档矫正的方法 &#xff08;1&#xff09;基于霍夫变换的文档矫正方法 &#xff08;2&#xff09;基于透视变换的文档矫正方法 2. OpenCV文档自动矫正实现 &…

【Linux系统】第二篇、权限管理篇

文章目录一、Linux下的用户二、文件的权限1. 文件访问者的分类2. 文件类型和访问权限3. 文件权限值的表示方法三、文件访问权限的相关设置方法1. chmod2. chown3. chgrp4. umask&#xff08;重点&#xff09;四、file指令五、目录的权限粘滞位一、Linux下的用户 这里我们在上一…

从 12K 到 60K, 这 2023Java 研发必问高级面试题,过关斩将拿 offer

前言 学习某一门技术或者框架的时候&#xff0c;第一步当然是要了解下面这几样东西。 是什么&#xff1f; 有哪些特点&#xff1f; 有哪些应用场景&#xff1f; 有哪些成功使用的案例&#xff1f; … 为了让你更好地了解 Netty 以及它诞生的原因&#xff0c;先从传统的网…

R语言中实现马尔可夫链蒙特卡罗MCMC模型

什么是MCMC&#xff0c;什么时候使用它&#xff1f; MCMC只是一个从分布抽样的算法。 这只是众多算法之一。这个术语代表“马尔可夫链蒙特卡洛”&#xff0c;因为它是一种使用“马尔可夫链”&#xff08;我们将在后面讨论&#xff09;的“蒙特卡罗”&#xff08;即随机&#…