Loading... > *匿名口令分享文本,文件,像拿快递一样取文件* 文件快递柜是一个开源项目,[开源地址](https://github.com/vastsa/FileCodeBox) ## 预览 #### 例站:[https://share.lanol.cn](https://share.lanol.cn) #### 暗黑模式 <table style="width:100%"> <tr style="width: 100%"> <td style="width: 50%"> <img src="https://pic.edunote.cn/i/2023/11/05/654752d510ec7.png" alt="寄文件" style=""> </td> <td style="width: 50%"> <img src="https://pic.edunote.cn/i/2023/11/05/65475300bf39f.png" alt="寄文件" style=""> </td> </tr> </table> #### 寄件 <table style="width: 100%"> <tr style="width: 100%"> <td style="width: 50%"> <img src="https://pic.edunote.cn/i/2023/11/05/654753d52838a.png" alt="寄文件" style=""> </td> <td style="width: 50%"> <img src="https://pic.edunote.cn/i/2023/11/05/654753f2c794f.png" alt="寄文本" style=""> </td> </tr> <tr style="width: 100%;"> <td colspan="2" style="width: 100%;"> <img src="https://pic.edunote.cn/i/2023/11/05/6547541585035.png" alt="寄文本" style=""> </td> </tr> </table> ## 主要特色 - [x] 轻量简洁:Fastapi+Sqlite3+Vue2+ElementUI - [x] 轻松上传:复制粘贴,拖拽选择 - [x] 多种类型:文本,文件 - [x] 防止爆破:错误次数限制 - [x] 防止滥用:IP限制上传次数 - [x] 口令分享:随机口令,存取文件,自定义次数以及有效期 - [x] 国际化:支持中文和英文 - [x] 匿名分享:无需注册,无需登录 - [x] 管理面板:查看所有文件,删除文件 - [x] 一键部署:docker一键部署 - [x] 自由拓展:S3协议、本地文件流,可根据需求在storage文件中新增存储引擎 - [x] 简单明了:适合新手练手项目 - [x] 终端下载:wget https://share.lanol.cn/share/select?code=83432 ## 部署方式 ### 一、Docker一键部署 #### 1.6版本AMD ```bash docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:latest ``` #### 1.6版本ARM ```bash docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:arm ``` #### 1.6版本注意 这一版改变比较大,如果出现问题可以尝试清空/opt/FileCodeBox目录,有问题欢迎反馈留言 注意,如果是第一次安装,请查看docker日志获取初始密码和后台地址,参考指令 后台本地文件列表,需要将服务器文件移动至目录/opt/FileCodeBox/data/locals,这样就可以显示了。 ```bash docker logs filecodebox ``` #### 更新方式 ```bash // 更新 docker pull lanol/filecodebox:beta // 停止容器并删除 docker stop filecodebox && docker rm filecodebox // 重新运行容器 docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:latest ``` #### 2.0版本,开发中(AMD & ARM) **默认信息:** 后端地址:`/#/admin` 后台密码:`FileCodeBox2023` **一键安装** ```bash docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:beta ``` 一键更新 ```bash docker pull lanol/filecodebox:beta && docker stop filecodebox && docker rm filecodebox && docker run -d --restart=always -p 12345:12345 -v /opt/FileCodeBox/:/app/data --name filecodebox lanol/filecodebox:beta ``` ### 二、宝塔部署 #### 环境准备 - [x] Centos7 - [x] 宝塔面板 #### 1. 安装Python项目管理器 ❗️❗️❗️ 注意:必须安装2.0版本,否则必失败   #### 2. 安装Python3.9.10 点击设置->版本管理->Python版本->3.9.10[未安装]->安装版本  安装完成  #### 3. 下载源码 GitHub地址:https://github.com/vastsa/FileCodeBox 选最新的版本就行  复制链接地址  回到宝塔,新建一个空白目录`FileCodeBox`  进入目录,粘贴远程下载源码  解压  #### 4. 添加项目 打开Python项目管理器->添加项目  启动成功  #### 5. 查看系统日志,获取初始化信息  根据信息进入后台  #### 6、宝塔反向代理 域名解析到ip之后,直接新增静态空网站  先申请ssl证书,因为反代之后就无法申请了,需关闭反代  添加反向代理  #### 7、配置修改 如果有端口冲突,请找到根目录下的 `/data/.env` 如果需要修改配置,可以将该文件放在`/opt/FileCodeBox/`目录下,并命名为`.env`,然后重启容器即可。 如果不是Docker,则需要在项目同目录下新建一个`data`文件夹,然后在创建`.env`文件 ```ini # 端口 PORT=12345 # Sqlite数据库文件 DATABASE_URL=sqlite+aiosqlite:///database.db # 静态文件夹 DATA_ROOT=./static # 静态文件夹URL STATIC_URL=/static # 开启上传 ENABLE_UPLOAD=True # 错误次数 ERROR_COUNT=5 # 错误限制分钟数 ERROR_MINUTE=10 # 上传次数 UPLOAD_COUNT=60 # 上传限制分钟数 UPLOAD_MINUTE=1 # 删除过期文件的间隔(分钟) DELETE_EXPIRE_FILES_INTERVAL=10 # 管理地址 ADMIN_ADDRESS=admin # 管理密码 ADMIN_PASSWORD=admin # 文件大小限制,默认10MB FILE_SIZE_LIMIT=10 # 网站标题 TITLE=文件快递柜 # 网站描述 DESCRIPTION=FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件,图片,视频,音频,压缩包等文件 # 网站关键词 KEYWORDS=FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件,图片,视频,音频,压缩包等文件 # 存储引擎 STORAGE_ENGINE=filesystem # 如果使用阿里云OSS服务的话需要额外创建如下参数: # 阿里云账号AccessKey KeyId=阿里云账号AccessKey # 阿里云账号AccessKeySecret KeySecret=阿里云账号AccessKeySecret # 阿里云OSS Bucket的地域节点 OSS_ENDPOINT=阿里云OSS Bucket的地域节点 # 阿里云OSS Bucket的BucketName BUCKET_NAME=阿里云OSS Bucket的BucketName ``` ## S3协议的对象存储配置 ❗️❗️❗️ 注意:必须配置SSL证书,否则无法下载 有关V2.0bata版,作者几乎没有任何说明,也没有相关的教程,也没有说bata版是什么意思,甚至都不在GitHub的releases列表,但是bata版支持S3协议的对象存储以及onedrive [雨云](https://www.rainyun.com/cat_?s=blog)ROS是支持S3协议的对象存储,目前(2023年10月18日)正在免费公测 **注意:API端点前要加“**`https://`**,末尾不能加“**`/`**”**,**配置完成后需要重启FileCode项目**  ## OneDrive作为存储的配置方法 **仅支持工作或学校账户,并且需要有管理员权限以授权API** ### 1. 需要配置的参数 ```ini file_storage=onedrive onedrive_domain=XXXXXX onedrive_client_id=XXXXXX-XXXXXX-XXXXXX-XXXXXX onedrive_username=XXXXXX@XXXXXX onedrive_password=XXXXXX ``` `onedrive_username`和`onedrive_password`是你的账户名(邮箱)和密码,另外两个参数需要在[微软Azure门户](https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade)中注册应用后获取。 ### 2. 应用注册 1. 登录[https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade](https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade),鼠标置于右上角账号处,浮窗将显示的`域`即为`onedrive_domain`的值。  2. 点击左上角的`+新注册`,输入名称, * 受支持的帐户类型:选择任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户和个人 Microsoft 帐户(例如,Skype、Xbox) * 重定向 URI (可选):选择`Web`,并输入`http://localhost` 3. 完成注册后进入概述页面,在概要中找到`应用程序(客户端)ID`,即为`onedrive_client_id`的值。  4. 此时还需要配置允许公共客户端流和API权限 * 在左侧选择`身份验证`,找到`允许的客户端流`,选择`是`,并**点击`保存`**。  * 在左侧选择`API权限`,点击`+添加权限`,选择`Microsoft Graph`->`委托的权限`,并勾选下述权限:openid、Files中所有权限、User.Read,如下图所示。最后**点击下方的`添加权限`**。  * 最后点击`授予管理员同意`,并**点击`是`**,最终状态变为`已授予`。  ### 3. 使用下述代码测试是否配置成功 安装依赖:`pip install Office365-REST-Python-Client` ```python # common.py import msal domain = 'XXXXXX' client_id = 'XXXXXX' username = 'XXXXXX' password = 'XXXXXX' def acquire_token_pwd(): authority_url = f'https://login.microsoftonline.com/{domain}' app = msal.PublicClientApplication( authority=authority_url, client_id=client_id ) result = app.acquire_token_by_username_password( username=username, password=password, scopes=['https://graph.microsoft.com/.default'] ) return result ``` 测试登录,如果成功打印出账户名,说明配置成功。 ```python from common import acquire_token_pwd from office365.graph_client import GraphClient try: client = GraphClient(acquire_token_pwd) me = client.me.get().execute_query() print(me.user_principal_name) except Exception as e: print(e) ``` 测试文件上传 ```python import os from office365.graph_client import GraphClient from common import acquire_token_pwd remote_path = 'tmp' local_path = '.tmp/1689843925000.png' def convert_link_to_download_link(link): import re p1 = re.search(r'https:\/\/(.+)\.sharepoint\.com', link).group(1) p2 = re.search(r'personal\/(.+)\/', link).group(1) p3 = re.search(rf'{p2}\/(.+)', link).group(1) return f'https://{p1}.sharepoint.com/personal/{p2}/_layouts/52/download.aspx?share={p3}' client = GraphClient(acquire_token_pwd) folder = client.me.drive.root.get_by_path(remote_path) # 1. upload file = folder.upload_file(local_path).execute_query() print(f'File {file.web_url} has been uploaded') # 2. create sharing link remote_file = folder.get_by_path(os.path.basename(local_path)) permission = remote_file.create_link("view", "anonymous").execute_query() print(f"sharing link: {convert_link_to_download_link(permission.link.webUrl)}") ``` 测试文件下载 ```python import os from office365.graph_client import GraphClient from common import acquire_token_pwd remote_path = 'tmp/1689843925000.png' local_path = '.tmp' if not os.path.exists(local_path): os.makedirs(local_path) client = GraphClient(acquire_token_pwd) remote_file = client.me.drive.root.get_by_path(remote_path).get().execute_query() with open(os.path.join(local_path, os.path.basename(remote_path)), 'wb') as local_file: remote_file.download(local_file).execute_query() print(f'{remote_file.name} has been downloaded into {local_file.name}') ``` 测试删除文件 ```python from office365.graph_client import GraphClient from common import acquire_token_pwd remote_path = 'tmp/1689843925000.png' client = GraphClient(acquire_token_pwd) file = client.me.drive.root.get_by_path(remote_path) file.delete_object().execute_query() ``` 最后修改:2023 年 11 月 08 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏
此处评论已关闭