记录自己编写的网盘,支持登录、注册、文件上传、文件下载,不同的用户只能操作自己的文件,在环境准备阶段附赠自己的源代码,请大佬勿喷,还有很多hug未修改,麻烦大家一键三连哦。
网盘功能
1.可视化
2.普通文件上传与下载
3.文件上传(docker搭建的hadoop平台)
4.文件下载(同上)
5.注册登录,用户规约
实现思路
1.数据库的搭建,文件保存,用户信息关联
2.测试本地连接hadoop
3.先完成基本的文件上传与下载
4.hadoop平台上传与下载
环境准备
1.django=2.2
2.python=3.7
3.pyhdfs (hadoop连接第三方库)
4.mysqlclient (mysql驱动程序)
环境连接
django环境搭建,请参照csdn链接
docker搭建的hadoop:csdn链接
简易版代码(未套html模板):csdn链接
界面版代码(配有html模板):csdn链接
流程图
实现过程思路如下
数据库创建思路
业务逻辑
数据全部存在一个文件夹,每一个用户有独立的文件空间,以用户ID创建文件夹,用户上传的文件,统一改名为:ID+时间,每一个用户只能看到自己的文件,以及上传、修改、删除自己的文件。
核心代码解析
1. 文件上传
通过input标签的tupe=file获取文件,通过**request.FILES.get(“file”)**得到上传的文件,本地进行保存。
# 文件保存
def save_file(file, filepath):
with open(filepath, 'wb+') as f:
for data in file.chunks():
f.write(data)
# 上传文件
<input type="file" name="file">
# 获取文件
file = request.FILES.get("file") # 获取文件数据
2.文件下载
请各位自行搜索,本人未清楚原理
def download(request, fileid):
# 本地下载
# 通过文件id,从数据库获取名字
file = Yunpan.objects.get(id=fileid).name
# 通过文件id,从数据库获取文件保存路径
file_path = Yunpan.objects.get(id=fileid).filepath
response = FileResponse(open(file_path, 'rb'))
response['Content-Type'] = 'application/octet-stream'
# 网上博客部分未添加escape_uri_path,下载的文件为down,不是任意文件
response['Content-Disposition'] = "attachment; filename*=UTF-8''{}".format(escape_uri_path(file))
return response
3.用户ID及名字保存
通过session保存信息,从而判断用户是否登录
# 设置session
request.session['user_id'] = UserInfo.objects.get(usename=user_name).id
request.session['user_name'] = user_name
# 调用session值
user_id = request.session["user_id"] # 用户id
# 清空session值
def logout(request):
request.session.clear() # 删除session里的全部内容
return redirect('/index')
4.删除本地文件、hadoop文件、数据库文件
savepath = os.path.join(downpath, file)
hdp_path = Yunpan.objects.get(id=fileid).hdfpath
fs.copy_to_local(hdp_path, savepath)
setting设置
通过在setting.py设置路径,可以简约逻辑判断的路劲编写,也便于路径修改
filepath = os.path.join(BASE_DIR, 'datas') # 上传到本地的路径
hdppath = "/test/" # 上传到hdp的路径
downpath = os.path.join(BASE_DIR, 'pdfDownload') # 下载到本地的路径
fs = pyhdfs.HdfsClient(hosts="虚拟机ip:50070", user_name="root") # 连接到hadoop
docker镜像安装
1.导入镜像
Docker load -i hdp.tar
2.拉取容器:
docker run -dit --name hdp -h master -p 50070:50070 -p 8020:8020 -p 50075:50075 -p 50010:50010 -p 50020:50020 -v hdp-vol:/data hdpv2
3.配置本机hosts
地址:C:\Windows\System32\drivers\etc