Django实现文件上传和下载

1、文件上传

(1)前端代码

<div class="upload_file">
            <h4 style="margin-bottom: 5px">上传CSV数据集</h4>
            <form action="/dataAnalysis/show_decision/" method="post" enctype="multipart/form-data">
                {% csrf_token %}
                <input type="file" required name="csv_file">
                <p></p>
                <input type="submit" class="update" value="上传CSV数据集">
                <p style="color: #66c968">{{ message }}</p>
            </form>
</div>

Django实现文件上传和下载_第1张图片
(2)后台代码

# 上传文件
def show_missdata(request):
    if request.method == "POST":
        f = request.FILES['csv_file']
        file_path = os.path.join('media/upload', f.name)
        with open(file_path, 'wb') as fp:
            for info in f.chunks():
                fp.write(info)
            fp.close()
            message = '上传成功'

(3)在settings.py文件里添加文件上传配置

# 设置文件上传路径,图片上传、文件上传都会存放在此目录里
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

(4)url配置

url(r'show_decision/$', views.show_decision, name='show_decision'),  

2、文件下载

(1)前端代码

<div class="download">
            <h4 style="margin-bottom: 5px">导出CSV数据集</h4>
            <p></p>
            <form action="/dataAnalysis/download/" method="post">
                {% csrf_token %}
                <input type="submit" value="导出CSV数据集"/>
            </form>
        </div>

在这里插入图片描述
(2)后台代码

# 文件下载
def download(request):
    local_filename = "media/csv/"
    filename = os.listdir(local_filename)
    filename.sort(key=lambda fn: os.path.getatime(local_filename + fn) if not os.path.isdir(local_filename + fn) else 0)
    # d = datetime.datetime.fromtimestamp(os.path.getmtime(local_filename + filename[-1]))
    # print('最新生成的文件是' + filename[-1] + ",时间:" + d.strftime("%Y{y}%m{m}%d{d}%H{h}%M{m1}%S{s}").format(y='年',m='月',d='日',h="时",m1="分",s="秒"))
    # print(filename[-1])
    file = open('media/csv/{}'.format(filename[-1]), 'rb')
    response = FileResponse(file)
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = "attachment; filename*=utf-8''{}".format(escape_uri_path(filename[-1]))
    return response

(3)url配置

url(r'download/$', views.download, name='download'),  # 数据集下载

你可能感兴趣的:(Django)