我的开源项目:文件快递柜-匿名口令分享文本,文件-像拿快递一样取文件

口令传送箱

解决问题

很多时候,我们都想将一些文件或文本传送给别人,或者跨端传递一些信息,但是我们又不想为了分享,而去下载一些七里八里的软件,这时候,我们就可以使用口令传送箱,像拿快递一样取文件。

主要特色

  • 轻量简洁,Fastapi+sqlite3
  • 拖拽,复制粘贴上传
  • 文件口令传输,生成二维码
  • 分享文件:多种上传方式供你选择
  • 分享文本:直接复制粘贴直接上传
  • 防爆破:错误五次拉黑十分钟
  • 完全匿名:不记录任何信息
  • 无需注册:无需注册,无需登录
  • Sqlite3数据库:无需安装数据库
  • 可以加get参数code,这样打开就会读取取件码如:http://xxx.com?code=12345
  • 管理面板:简单列表页删除违规文件
  • 口令使用次数,口令有效期,二维码分享

更新记录

2022年12月10日 01:56:43

  1. 管理面板已新增,一如既往的极简,只有删除
  2. 二维码图片(调用的网络接口,如果离线环境将无法使用,一切为了极简)

2022年12月10日 21:10:00

  1. 取件码有效期,取件码使用次数
  2. 优化代码逻辑
  3. 限制上传文件大小
  4. 完善配置参数

2022年12月10日 23:50:00

  1. 修复取件不显示码的问题
  2. 修复文件次数为1时,文件被删除的问题

系统截图

取件

取件
取件

寄件

取件
取件

管理面板

取件
取件

关键代码

@app.get('/')
async def index():
    return HTMLResponse(index_html)

@app.post('/')
async def index(request: Request, code: str, db: Session = Depends(get_db)):
    info = db.query(database.Codes).filter(database.Codes.code == code).first()
    error = error_ip_count.get(request.client.host, {'count': 0, 'time': datetime.datetime.now()})
    if error['count'] > error_count:
        if datetime.datetime.now() - error['time'] < datetime.timedelta(minutes=error_minute):
            return {'code': 404, 'msg': '请求过于频繁,请稍后再试'}
        else:
            error['count'] = 0
    else:
        if not info:
            error['count'] += 1
            error_ip_count[request.client.host] = error
            return {'code': 404, 'msg': f'取件码错误,错误5次将被禁止10分钟'}
        else:
            return {'code': 200, 'msg': '取件成功,请点击库查看', 'data': info}

@app.post('/share')
async def share(text: str = Form(default=None), file: UploadFile = File(default=None), db: Session = Depends(get_db)):
    cutoff_time = datetime.datetime.now() - datetime.timedelta(hours=exp_hour)
    db.query(database.Codes).filter(database.Codes.use_time < cutoff_time).delete()
    db.commit()
    code = get_code(db)
    if text:
        info = database.Codes(
            code=code,
            text=text,
            type='text/plain',
            key=uuid.uuid4().hex,
            size=len(text),
            used=True,
            name='分享文本'
        )
        db.add(info)
        db.commit()
        return {'code': 200, 'msg': '上传成功,请点击文件库查看',
                'data': {'code': code, 'name': '分享文本', 'text': text}}
    elif file:
        key, size, full_path = get_file_name(uuid.uuid4().hex, file.filename.split('.')[-1], file)
        info = database.Codes(
            code=code,
            text=full_path,
            type=file.content_type,
            key=key,
            size=size,
            used=True,
            name=file.filename
        )
        db.add(info)
        db.commit()
        return {'code': 200, 'msg': '上传成功,请点击文件库查看',
                'data': {'code': code, 'name': file.filename, 'text': full_path}}
    else:
        return {'code': 422, 'msg': '参数错误', 'data': []}

部署方式

先拉取代码,然后修改main.py文件,将里面写了注释的可以根据需求改一下

服务端部署

  1. 安装Python3
  2. 拉取代码,解压缩
  3. 安装依赖包:pip install -r requirements.txt
  4. 运行 uvicorn main:app --host 0.0.0.0 --port 12345
  5. 然后你自己看怎么进程守护吧

宝塔部署

  1. 安装宝塔Python Manager
  2. 然后你自己看着填吧

Docker部署

docker build --file Dockerfile --tag filecodebox .
docker run -d -p 12345:12345 --name filecodebox filecodebox

开源地址

https://github.com/vastsa/FileCodeBox
如果可以的话,麻烦点一个star

免责声明

本项目开源仅供学习使用,不得用于商业用途以及任何违法用途,否则后果自负,与本人无关。使用请保留项目地址谢谢。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值