Django实现文件分享系统


一、效果展示

文件上传和展示:

文件搜索:

文件下载:

删除文件:

二、关键代码

#urls.py

from django.urls import path,re_path
from .views import HomeView,DisplayView,MyView,SearchView
from . import viewsapp_name = 'share'
urlpatterns = [path('', HomeView.as_view(), name='home'),# 当用户发起主页的GET请求时# 会调用 HomeView的父类的get方法处理# 怎么调用呢,这里需要用到HomeView的父类的as_view方法# 此方法会调用dispatch方法, 由后者根据请求类型选择响应的处理函数path('s/<code>', DisplayView.as_view(), name='display'),   #展示上传成功的文件path('my/', MyView.as_view(), name='my'),            #管理文件path('search/', SearchView.as_view(), name='search'),    #搜索文件re_path(r'^download/(?P<id>\d*$)', views.Download, name='download'),   #下载文件re_path(r'^delete/(?P<id>\d*$)', views.DeleteFile, name='delete'),  #删除文件]

#views.py

from django.shortcuts import render
from django.views.generic import TemplateView,ListView
import random
import string
import json
from django.http import HttpResponse,HttpResponsePermanentRedirect,StreamingHttpResponse,HttpResponseRedirect
from .models import Upload
import os
# 创建视图类需要基础视图基类
# 例如 TemplateView 就是用于展示页面的模板视图基类
# 该类仅提供get方法,用于处理GET请求
# 当然也可以自定义其他方法,例如post
# 展示主页的话,只需要提供模板文件的名字即可
# 当客户端发起get请求时,由父类的get方法处理请求
# 该属性用于提供模板文件,在父类的方法中被调用
class HomeView(TemplateView):'''用来展示主页的视图类'''template_name = "base.html"def post(self, request):if request.FILES:    #如果表单中有文件file = request.FILES.get('file')code = ''.join(random.sample(string.digits, 8))     #设置文件的唯一标识code,并且用作文件改名name = file.namesize = int(file.size)path = 'filesystem/static/file/' + code + name   #设置文件保存的路径,并且更改文件名(防止重名文件)with open(path, 'wb') as f:f.write(file.read())      #保存文件upload = Upload(path = path,name = name,filesize = size,code = code,pcip = str(request.META['REMOTE_ADDR']))upload.save()   #向数据库插入数据return HttpResponsePermanentRedirect("/share/s/"+code)    #重定向到DisplayViewclass DisplayView(ListView):'''展示文件的视图类'''def get(self, request, code):uploads = Upload.objects.filter(code=code)     #显示出指定文件if uploads:for upload in uploads:upload.dowmloadcount += 1   #记录访问次数upload.save()return render(request, 'content.html', {'content':uploads, 'host':request.get_host()})class MyView(ListView):'''用户管理视图类,就是用户管理文件的那个页面的视图类'''def get(self, request):#ip = request.META['REMOTE_ADDR']#uploads = Upload.objects.filter(pcip=ip)  uploads = Upload.objects.all()     #查询所有文件for upload in uploads:upload.dowmloadcount += 1upload.save()return render(request, 'content.html', {'content':uploads})   #将所有文件信息渲染展示class SearchView(ListView):'''搜索功能的视图类'''def get(self, request):code = request.GET.get('kw')   # 获取关键词u = Upload.objects.filter(name__icontains=str(code))    # 模糊搜索# select * from share_upload where name like '%code%';data = {}if u:# 将符合条件的数据放到data中for i in range(len(u)):           # 循环输出查询的结果u[i].dowmloadcount += 1u[i].save()data[i]={}data[i]['download'] = u[i].dowmloadcountdata[i]['filename'] = u[i].namedata[i]['id'] = u[i].iddata[i]['ip'] = str(u[i].pcip)data[i]['size'] = u[i].filesizedata[i]['time'] = str(u[i].datetime.strftime('%Y-%m-%d %H:%M'))return HttpResponse(json.dumps(data), content_type="application/json")def Download(request, id):"""下载压缩文件:param request::param id: 数据库id:return:"""data = Upload.objects.all()file_name = ""  # 文件名for i in data:if i.code == id:  # 判断id一致时file_name = i.name  # 覆盖变量base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # 项目根目录file_path = os.path.join(base_dir, 'filesystem', 'static', 'file', file_name)  # 下载文件的绝对路径if not os.path.isfile(file_path):  # 判断下载文件是否存在return HttpResponse("Sorry but Not Found the File")def file_iterator(file_path, chunk_size=512):"""文件生成器,防止文件过大,导致内存溢出:param file_path: 文件绝对路径:param chunk_size: 块大小:return: 生成器"""with open(file_path, mode='rb') as f:while True:c = f.read(chunk_size)if c:yield celse:breaktry:# 设置响应头# StreamingHttpResponse将文件内容进行流式传输,数据量大可以用这个方法response = StreamingHttpResponse(file_iterator(file_path))# 以流的形式下载文件,这样可以实现任意格式的文件下载response['Content-Type'] = 'application/octet-stream'# Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名response['Content-Disposition'] = 'attachment;filename="{}"'.format(file_name)except:return HttpResponse("Sorry but Not Found the File")return responsedef DeleteFile(request, id):'''删除指定文件'''data = Upload.objects.all()file_name = ""  # 文件名for i in data:if i.code == id:  # 判断id一致时file_name = i.code + i.name  # 覆盖变量base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # 项目根目录file_path = os.path.join(base_dir, 'filesystem', 'static', 'file', file_name)  # 下载文件的绝对路径if os.path.exists(file_path):os.remove(file_path)file = Upload.objects.get(code=id)file.delete()return HttpResponseRedirect('/share/my/')'''except Exception as e:return http.HttpResponseForbidden('文件不存在,下载失败!')'''

Django实现文件分享系统相关推荐

  1. 文件分享平台php源码,简易社会化用户文件分享系统 v1.0

    简易社会化用户文件分享系统使用第三方社交登入,身份验证通过后方能上传文件,在一定程度上可防止被上传不法文件. 程序具有执行速度快(<0.1s).战胜内存低(<500KB)等优点. 首次使用 ...

  2. Linux局域网文件分享系统Samba

    上学的时候在学校机房见过FTP做的文件分享系统,服务器是Windows的,当时感觉功能真的很强大,不管是哪台机器都可以共享一个文件夹,后来自己在家里通过查阅各种资料,用自己的win7做FTP服务器,做 ...

  3. 基于微信小程序的学院通知与文件分享系统app设计与实现-计算机毕业设计源码+LW文档

    摘  要 网络的广泛应用给生活带来了十分的便利.所以把学院通知与文件分享管理与现在网络相结合,利用java技术建设学院通知与文件分享系统app,实现学院通知与文件分享的信息化.则对于进一步提高学院通知 ...

  4. 计算机毕业设计python+django摄影作品相册分享系统(源码+系统+mysql数据库+Lw文档)

    项目介绍 随着人们生活水平的逐步提高,旅游成了大家必不可少放松项目,每当笔者走到一个美丽的景点,就会忍不住拿起数码相机照上几张留做回忆.虽然照片最后会存入到自己的电脑里,但是时间一长.照片一多,这些有 ...

  5. 2022最新云存储网盘系统/文件分享存储系统

    正文: 2022最新云存储网盘系统_文件分享系统_文件存储系统,其它的就没什么好介绍的了,有兴趣的自行去体验吧. 程序: wwbefs.lanzout.com/iypAi0bokx9i 图片:     ...

  6. Cloudreve搭建公私兼备网盘、个网盘、文件分享-公有云系统

    软件介绍: Cloudreve 可助你即刻构建出兼备自用或公用的网盘服务,通过多种存储策略的支持.虚拟文件系统等特性实现灵活的文件管理体验. Cloudreve 可以让您快速搭建起公私兼备的网盘系统. ...

  7. 文件存储php源码,FFS5-Mini v120731 最终版 php网络文件存储分享系统

    FFS是一款基于PHP+多重数据库的先进的网络文件存储分享系统,通过本系统,用户可以将资料在线上传到您的系统中,独创的文件分享码模式,轻松分享每一个文件.更有丰富多彩的文件应用提升文件的价值. FFS ...

  8. PHP仿百度网盘文件分享dzzoffice网盘系统源码

    简介: 1.断点续传功能. 市面上许多所谓的断点传传基本没有完美的,本源码经过修复,完美实现了断点.续传功能. 切片:大文件分成1MB大小的小文件,服务器上传无压力,切片文件合并无压力. 市面上许多切 ...

  9. [附源码]Python计算机毕业设计儿童成长记录与分享系统Django(程序+LW)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+N ...

最新文章

  1. 安装wxpython——python程序GUI图形界面使用
  2. MongoDB之副本集
  3. JTAG与STC,DEBUGWIRE区别
  4. 产品经理和UX设计师,变革已可期
  5. asp.net web开发步骤_如何在Windows上做Python开发?微软出了官方教程
  6. php二级域名 同步登录,php网站单点登录--卷一(跨二级域名)
  7. beanutils.copyproperties属性值丢失_数据质量 | 脏数据?缺失值、异常值和一致性分析?...
  8. 世界足坛的一些著名德比
  9. 处理IOStream异常
  10. html 数据类型 text,客户端发现响应内容类型为“text/html; charset=utf-8”,但应为“text/xml”。...
  11. 微信语音麦克风静音_微信语音关闭麦克风对方知道吗
  12. 关于让div元素垂直居中的几种方法
  13. 小学计算机无生试讲教案,小学数学无生试讲教案(9页)-原创力文档
  14. 计算机的音乐怎样弹生日快乐,5 分钟让你学会用吉他弹《生日快乐》歌
  15. 中易浏览器(enjoyie) 录音软件
  16. IOS回调机制——代理,通知中心以及Block
  17. speedoffice如何调整Word文档表格单元格大小
  18. java11规范_京东Java编码规范V11.pdf
  19. 给电脑文件批量重命名和更改后缀名
  20. 推荐几个比较骚的技术公众号【文末福利】

热门文章

  1. os.listdir是什么意思
  2. html打照片墙的代码原理,使用html+css实现一个个人照片墙
  3. 推荐一款本地伪原创工具
  4. 数据结构实践1——学生档案管理系统
  5. 学习:如何提高理解力
  6. 【概述】spark(一):spark特点、知识范畴、spark架构、任务提交流程、支持哪些运行环境
  7. fopen函数mode参数详解
  8. 我为什么越来越喜欢规律作息
  9. android中格式对齐,android 优化之字节对齐
  10. 如何让WinForms应用程序拥有Windows 11设计主题?