分享一个基于七牛对象存储开发的Python个人网盘,使用Python + HTML实现
分享一个基于七牛对象存储开发的Python个人网盘,使用Python + HTML实现
好像不错的样子。
这个项目听起来挺有意思的。七牛云的对象存储确实是个搭建个人网盘的好选择,性价比高,API也清晰。用Python做后端,HTML做前端,这个技术栈很直接,适合个人项目。
核心思路应该就是:前端HTML页面提供上传/下载/删除文件的界面,用户操作后,前端通过表单或者Fetch API把请求发给后端的Python服务(比如用Flask或FastAPI框架)。Python后端收到请求后,不直接存储文件,而是调用七牛云的SDK,生成一个临时的上传凭证(对于上传操作)或者文件的下载链接(对于下载操作),再返回给前端。前端拿到上传凭证后,可以直接把文件上传到七牛云,这样能减轻你服务器的带宽压力。文件列表可以通过后端调用七牛云的list接口获取。
这里有个最简化的Flask示例,展示一下后端生成上传凭证和文件列表的关键部分:
from flask import Flask, jsonify, render_template
from qiniu import Auth, BucketManager
import os
app = Flask(__name__)
# 配置你的七牛云密钥
access_key = 'YOUR_ACCESS_KEY'
secret_key = 'YOUR_SECRET_KEY'
bucket_name = 'YOUR_BUCKET_NAME'
bucket_domain = 'YOUR_BUCKET_DOMAIN' # 例如:'xxx.your-domain.com'
q = Auth(access_key, secret_key)
bucket = BucketManager(q)
@app.route('/')
def index():
# 渲染前端HTML页面
return render_template('index.html')
@app.route('/upload_token')
def get_upload_token():
# 生成上传凭证,前端用这个token直传文件到七牛
token = q.upload_token(bucket_name)
return jsonify({'uptoken': token})
@app.route('/files')
def list_files():
# 获取存储空间的文件列表(这里简化处理,只取第一页)
ret, eof, info = bucket.list(bucket_name, limit=100)
file_list = []
if ret is not None:
for item in ret.get('items', []):
# 为每个文件生成一个可访问的下载链接
file_url = 'http://' + bucket_domain + '/' + item['key']
file_list.append({
'name': item['key'],
'url': file_url,
'size': item['fsize']
})
return jsonify({'files': file_list})
if __name__ == '__main__':
app.run(debug=True)
前端HTML (templates/index.html) 需要包含用JavaScript处理上传(可以使用七牛的JS-SDK)和动态加载文件列表的逻辑。这个结构把核心流程跑通了,你可以在上面增加用户认证、分页、文件夹管理这些功能。
总结一下,用Python+七牛云搭个人网盘是条很靠谱的路径。
可以加个搜索功能
七牛对象存储搜索功能太弱了,只能前缀搜索~~~ 就没加。
参考:
https://developer.qiniu.com/kodo/api/1731/api-overview
https://developer.qiniu.com/kodo/api/1284/list
Seafile 了解下 ~~
谢谢了,给颗星星。
或者先读取所有列表做个 list ……但是代价极高。
而且文件从其他地方上传了,怎么抓取更新 list,一抓就是全部 get 一次,那请求数量…
所以我做的类似的东西里也根本不考虑这种功能。。。


