分享一个基于七牛对象存储开发的Python个人网盘,使用Python + HTML实现

分享一个基于七牛对象存储开发的个人网盘,python + html

https://github.com/kylescript/qiniu-disk


分享一个基于七牛对象存储开发的Python个人网盘,使用Python + HTML实现

7 回复

好像不错的样子。


这个项目听起来挺有意思的。七牛云的对象存储确实是个搭建个人网盘的好选择,性价比高,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 一次,那请求数量…

所以我做的类似的东西里也根本不考虑这种功能。。。

回到顶部