Django+Vue中文件的上传和下载
创始人
2024-02-16 20:42:29

场景:上传一个源数据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.*)$', 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_nameordering = ('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.TestTrafficFileModelfields = '__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.FilesSerializerordering_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)

      })

    },

 

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...