MySQL文件代码如下:
-- MySQL dump 10.13 Distrib 5.7.43, for Win64 (x86_64)
--
-- Host: localhost Database: files
-- ------------------------------------------------------
-- Server version 5.7.43
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: `files`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `files` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `files`;
--
-- Table structure for table `file_data`
--
DROP TABLE IF EXISTS `file_data`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `file_data` (
`FILE_ID` int(6) NOT NULL,
`FILE_NAME` varchar(50) DEFAULT NULL,
`FILE_DATAS` longtext,
`CREATE_FILE_DATE` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`FILE_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `file_data`
--
LOCK TABLES `file_data` WRITE;
/*!40000 ALTER TABLE `file_data` DISABLE KEYS */;
/*!40000 ALTER TABLE `file_data` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user` (
`UserNo` int(4) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
`UserName` varchar(12) DEFAULT NULL,
`PassWord` varchar(18) DEFAULT NULL COMMENT '密码',
PRIMARY KEY (`UserNo`),
UNIQUE KEY `UserName` (`UserName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `user`
--
LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-10-19 18:51:34
Python代码如下:
import os
import getpass
import base64
import pymysql
from time import sleep
user = 'cm9vdA=='
pwd = 'WHlMaW56YzEyMy4='
host = 'MTkyLjE2OC4yMS4yMjk='
port = 'MzMwNg=='
try:
mysql = pymysql.connect(user=base64.b64decode(user).decode("utf8"),
passwd=base64.b64decode(pwd).decode("utf8"),
host=base64.b64decode(host).decode("utf8"),
port=int(base64.b64decode(port).decode("utf8")))
# 创建游标
cursor = mysql.cursor()
except:
print("连接超时...\n即将关闭程序")
sleep(1.5)
exit(1)
class Cloud_disk:
def HomePage():
while True:
print(f"\n{'/******** 云盘系统 ********/':^25}\n")
print(f"{'| 1.登录 |':^25}\n{'| 2.注册 |':^25}\n{'| 3.退出 |':^25}\n\t\t\t----COPYRIGHT : CN_Lin")
options = input(">>")
if options == '1':
os.system("cls")
Cloud_disk.Login()
elif options == '2':
os.system("cls")
Cloud_disk.sign_on()
elif options =='3':
# 退出
exit(1)
else:
os.system("cls")
print("无此选项!!!")
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
# 登陆模块
def Login():
adminuser = "TGluLg=="
adminpwd = "WHlMaW56Yw=="
# sql = 'select UserName, PassWord from files.user'
# cursor.execute(sql)
# user_connect = cursor.fetchall() # 获取查询数据
times=4
print(f"\n{'/*登录中心*/':^25}\n")
while times:
user = input("账户: ")
pwd = getpass.getpass("密码: ")
# 直接从数据库中查询当前用户与密码,可以解决人多用循环速度慢的问题
sql = f'select UserName, PassWord from files.user where UserName="{user}"'
cursor.execute(sql)
user_connects = cursor.fetchall() # 获取查询数据
for user_connect in user_connects: # user_connect 用户信息 [0]是用户名 [1] 是密码
if(user == user_connect[0] and pwd == user_connect[1]):
if(user == base64.b64decode(adminuser).decode("utf8") and pwd == base64.b64decode(adminpwd).decode("utf8")):
os.system("cls")
print("\n/*管理员*/\n")
Cloud_disk.admin()
else:
os.system("cls")
while True:
options = input("\n\t /** 功能 **/\n\n 1.上传\n 2.下载\n 3.返回\n\n >> ")
if options == '1':
Cloud_disk.upload()
elif options == '2':
Cloud_disk.download()
elif options == '3':
return 0
else:
print("ERROR! 无此项 重新输入\n")
os.system("cls")
times-=1
print(f"账户或密码错误,请重试!'\n/*剩余{times}次机会*/\n")
print("! 账户锁定1分钟 !\n")
sleep(60)
os.system("cls")
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
# 注册模块
def sign_on():
print(f"\n{'/*注册中心*/':^25}\n")
while True:
user = input("账户: ")
pwd = getpass.getpass("密码: ")
pwds = getpass.getpass("\n再次确认密码: ")
if pwd == pwds:
if(len(user)>12 or len(pwd)>18):
print("账户长度不能超过12\n密码长度不能超过18!\n")
continue
else:
sql_1 = 'select UserNo from files.user'
cursor.execute(sql_1)
scont = cursor.fetchall()
sql_2 = f"insert into files.user values({len(scont)+1},'{user}','{pwd}')"
try:
cursor.execute(sql_2)
mysql.commit()
cursor.fetchall()
print(f"注册成功!\n请妥善保管好您的\n账户: {user}\n密码:{pwd}\n及即将返回主页!\n")
Cloud_disk.Login()
break
except:
print("注册失败!")
Cloud_disk.sign_on()
else:
os.system("cls")
print("亲,两次密码输滴不正确哟!\n")
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
# MySQL管理员模块
def admin():
while True:
sql = input("Mysql >")
if sql == 'exit':
Cloud_disk.HomePage()
else:
try:
cursor.execute(sql)
conts = cursor.fetchall()
mysql.commit()
for cont in conts:
print(list(cont))
print("\nQuery OK!\n")
except:
print("SQL语句有误!\n")
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
# 上传模块
def sqlupload(file_path):
# 查询服务器的数据量
nums_sql = f"select FILE_ID from files.file_data"
cursor.execute(nums_sql)
mysql.commit()
nums = cursor.fetchall()
with open(file_path,"rb") as F1:
content = F1.read()
file_name = os.path.split(file_path)[1]
content = base64.b64encode(content).decode("utf8")
sql = f"insert into files.file_data(FILE_ID, FILE_NAME, FILE_DATAS) values({len(nums)+1},'{file_name}','{content}')"
cursor.execute(sql)
mysql.commit()
print(f"{file_name}上传成功!\n")
def upload():
# 记录文件夹中的文件
FILES = []
while True:
file_path = input("文件地址 > ")
# 设置中途返回
if file_path == 'exit':
break
# 上传文件夹中的数据
if os.path.isdir(file_path):
print("\n当前需要上传的文件如下: \n+--------------------------+")
nums= 0
for Fs in os.listdir(file_path):
if(os.path.isfile(os.path.join(file_path,Fs))):
print(f"|{nums}. {Fs}")
FILES.append(os.path.join(file_path,Fs))
nums += 1
input("+--------------------------+\n按任意键确定开始...\n")
for FisP in FILES:
Cloud_disk.sqlupload(FisP)
# 上传文件
else:
if os.path.isfile(file_path):
Cloud_disk.sqlupload(file_path)
else:
print("! 请输入正确的文件地址 !\n")
continue
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
# 下载模块
def download():
# 用于记录文件是否全部下完
count = 0
Filecount = 1
FIles = []
state = True
while state:
if(count == Filecount):
os.system("cls")
print(f"{FIles} 文件下载成功\n")
sql = 'select FILE_ID, FILE_NAME from files.file_data'
cursor.execute(sql)
lists = cursor.fetchall()
mysql.commit()
# 文件编号存储
FileNo = []
INPUTNo = []
# 记录文件
record_file = []
# 查询存储文件的列表
print("\n[编号] [名称]")
for ls in lists:
print(list(ls))
FileNo.append(ls[0])
numbers = input("\n[温馨提示]: 用逗号隔开可以多选文件哦!\n文件编号>> ")
# 设置中途返回
if numbers == 'exit':
state = False
# 记录下载次数
record = 0
# 任务列表
INPUTNo = numbers.split(",")
for number in INPUTNo:
# 判断是否是数字
if number.isdigit() and int(number) in FileNo:
# 获取文件数据
dsql = f'select FILE_NAME, FILE_DATAS from files.file_data where FILE_ID = {number}'
cursor.execute(dsql)
datas = cursor.fetchall()
mysql.commit()
for data in datas:
file_datas = data
# 解码
file_data = base64.b64decode(file_datas[1])
# 只输入一次地址
if record == 0:
while True:
faddr = input("下载地址>> ")
if faddr == 'exit':
state = False
if faddr == 'C:' or faddr == 'c:':
print("无权限访问C盘根目录, 请重新输入\n")
continue
else:
break
try:
with open(faddr+'\\'+file_datas[0],"wb") as file:
file.write(file_data)
except:
print("! 请输入正确的文件夹地址 !\n")
continue
print(f"\n{file_datas[0]}下载成功!\n")
record_file.append(file_datas[0])
record += 1
else:
os.system("cls")
print(f"{record_file} {len(record_file)}个文件下载成功, 但发现了一处错误: ")
print(f"! 无效的'{number}', 文件未下载成功, 请选择正确的编号 !")
break
count = record
Filecount = len(INPUTNo)
FIles = record_file
if __name__ == '__main__':
disk = Cloud_disk
disk.HomePage()