用Django实现文件的上传下载,前后端不分离

用Django实现文件的上传下载,前后端不分离

在这里插入图片描述

首先需要在setting中加入下面两行代码,将media加入到BASE_DIR中

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

在你项目的urls中加入下面一行

url(r'^media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}, name='media'),
# 完整的urls
from django.conf.urls import url
from django.contrib import admin
from django.urls import path, include
from django.views.static import serve

from mytest01.settings import MEDIA_ROOT

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/',include("myapp01.urls")),
    url(r'^media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}, name='media'),
]

app下的urls

from django.urls import path
from myapp01 import views

urlpatterns = [
    path('upload/',views.UploadFile)
]

views代码

def UploadFile(request):
    data = {}
    if request.method == "POST":
        upload_file = request.FILES.get("uploadfile")
        file_name = os.path.splitext(upload_file.name)
        print(file_name)
        print(upload_file.name)
        print(upload_file.size)
        # FileSystemStorage类继承自Storage类,location是存储文件的绝对路径,默认值是
        # settings中的MEDIA_ROOT值,base_url默认值是settings中的MEDIA_URL值。
        fs = FileSystemStorage()
        filename = fs.save(upload_file.name, upload_file)
        data = {
            "file_data": "http://127.0.0.1:8001" + str(fs.url(filename))}
    return render(request, 'upload.html', context=data)

templates upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h2>Upload</h2>
    <form method="post" enctype = "multipart/form-data">
        <input type="file" name="uploadfile">
        <button type="submit">upload file</button>
    </form>
        <h1><a href="{{ file_data }}">download</a></h1>
</body>
</html>

文件上传前端写的很low,哈哈,大家凑合看

点击预览

在这里插入图片描述

选择文件,点击打开

在这里插入图片描述

点击upload file 按钮即可实现文件上传功能

在这里插入图片描述

上传的文件在media下,因为之前上传了一个文件,再次上传相同的文件,系统会自动给文件加上7位后缀,防止重名

在这里插入图片描述

文件下载,点击download,确定即可实现文件下载功能

在这里插入图片描述

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值