zoukankan      html  css  js  c++  java
  • 【django】 后台上传于下载 (通用型下载文件的 路由与下载函数)

    通用路由:
         # 下载文件
        url("media/(?P<path>.*)$", file_down.FileDown.as_view())
    
    通用下载文件函数:
        from django.utils.http import urlquote
    from rest_framework.views import APIView
    from django.shortcuts import render, redirect, HttpResponse
    from dal import models
    from django.http import JsonResponse, FileResponse, StreamingHttpResponse
    import os
    
    import xlwt
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # C:UsersuserDesktopDownTest
    
    
    class FileDown(APIView):
    
        def get(self, request,path):
    
            path = BASE_DIR + "\media\" + path.replace("/","\")
            print("path",path)
            message = {}
    
            file_name = path.split("\")[-1]
            print("file_name",file_name)
    
    
            file = open(path.replace(" ",""), 'rb')  # 字符串替换成文件
    
            # 告诉浏览器 这个是下载文件
            response = FileResponse(file)
            response['Content-Type'] = 'application/octet-stream'
            response['Content-Disposition'] = "attachment;filename={}".format(urlquote(file_name))  # 设置名字
            print(response)
            return response
    通用settings配置:
    LANGUAGE_CODE = 'zh-hans'
    
    TIME_ZONE = 'Asia/Shanghai'
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = True
    
    # Internationalization
    # https://docs.djangoproject.com/en/1.11/topics/i18n/
    
    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static'),
        os.path.join(BASE_DIR, "media"),
    ]
    
    # Django用户上传的都叫media文件
    MEDIA_URL = "/media/"
    # media配置,用户上传的文件都默认放在这个文件夹下
    MEDIA_ROOT = os.path.join(BASE_DIR, "media")
    
    
    REST_FRAMEWORK = {
        "DEFAULT_AUTHENTICATION_CLASSES": [],
        "DEFAULT_PERMISSION_CLASSES": [],
    }
    数据库设计:
    class Suggestion(models.Model):
        """
         项目建议表
        """
        name = models.ForeignKey(to="UserInfo",verbose_name="建议人员")
        file = models.FileField(upload_to='suggestion/files', null=False,unique=True, blank=False,verbose_name="文件(点击下载)")
        file_name = models.CharField( max_length=50, null=False,verbose_name="文件标题")
        is_staff =models.BooleanField(verbose_name="是否紧急")
        is_staf =models.BooleanField(verbose_name="是否采用")
    
        def __str__(self):
            return self.file
    
        class Meta:
            verbose_name = "项目建议表"
            verbose_name_plural = verbose_name
            db_table = 'Suggestion'
  • 相关阅读:
    WM有约(二):配置信息
    ASP+Wrod、excel打印程序示例
    用stream直接下载文件
    ASP判断gif图像尺寸的方法
    白菜世纪RSS无刷新聚合器(1221修正)
    ASP.NET常用代码
    图片超过规定的大小就按原图片大小缩小
    javascript弹出窗口总结
    asp excel sql 关系大总结
    打开窗口
  • 原文地址:https://www.cnblogs.com/wanghong1994/p/12716469.html
Copyright © 2011-2022 走看看