🚀 空白文件網站
這是一個基於 Laravel 的應用程序,為 blankfiles.com 提供支持。用戶可以按類型和類別瀏覽並下載最小有效空白文件。文件數據和資源通過可配置的 CDN 從 filearchitect/blank-files 倉庫提供。
🚀 快速開始
本項目是一個基於 Laravel 的應用程序,用於搭建空白文件網站。用戶可通過該網站按類型和類別瀏覽並下載最小有效空白文件。
✨ 主要特性
- 支持按文件類型和類別瀏覽與下載空白文件。
- 文件數據和資源通過可配置的 CDN 從指定倉庫獲取。
- 提供 Web 界面和 API 接口,方便不同方式的訪問。
- 支持緩存配置,可減少 CDN 請求。
- 具備 API 速率限制和使用分析日誌。
📦 安裝指南
環境要求
- PHP 8.2 及以上版本
- Composer
- Node.js 18 及以上版本(用於 Vite 前端構建)
安裝步驟
git clone https://github.com/filearchitect/blankfiles-website.git
cd blankfiles-website
composer install
cp .env.example .env
php artisan key:generate
在 .env 文件中設置 CDN_URL(詳見 配置說明)。然後構建前端並運行應用:
npm install && npm run build
php artisan serve
或者使用 Laravel Herd 並配置 .test 域名。
📚 詳細文檔
配置說明
| 變量 |
描述 |
CDN_URL |
必需。用於構建可下載文件 URL 的基礎 URL,格式為 {CDN_URL}/files/{filename}。默認值:https://raw.githubusercontent.com/filearchitect/blank-files/main(在 config/app.php 中設置)。 |
CATALOG_URL |
可選。目錄 JSON 文件(files/files.json)的直接 URL。默認值為 https://raw.githubusercontent.com/filearchitect/blank-files/main/files/files.json,以確保數據的即時性。 |
CACHE_ENABLED |
可選。當設置為 true 時,將緩存從 CDN 獲取的文件列表。緩存的 TTL 由 CATALOG_TTL_MINUTES 控制(默認值為 10)。詳見 config/cache.php 和 app/Services/FileService.php。 |
CATALOG_TTL_MINUTES |
可選。當 CACHE_ENABLED=true 時,遠程目錄的緩存 TTL(分鐘)。值越小,新格式的更新越及時;值越大,CDN 請求越少。 |
API_KEYS |
可選。用於高頻率 API 客戶端的逗號分隔的 API 密鑰(通過 X-API-Key 或 Authorization: Bearer ... 使用)。 |
API_PUBLIC_RATE_LIMIT |
可選。公共 API 的每分鐘請求限制(默認值為 30)。 |
API_KEY_RATE_LIMIT |
可選。使用 API 密鑰的每分鐘請求限制(默認值為 300)。 |
API_USAGE_LOG_CHANNEL |
可選。API 使用分析的日誌通道(默認值為 api_usage)。 |
OPENPANEL_CLIENT_ID |
可選。設置後啟用 OpenPanel 網頁分析腳本。 |
OPENPANEL_CLIENT_SECRET |
可選。保留用於服務器端 OpenPanel 事件(不暴露給瀏覽器腳本)。 |
項目結構
| 路徑 |
用途 |
app/Http/Controllers/FileController.php |
Web 端:主頁、文件詳情頁、下載代理。 |
app/Http/Controllers/Api/FileController.php |
API 端:列出所有文件、按類型列出文件。 |
app/Services/FileService.php |
獲取目錄 JSON 文件(CATALOG_URL)並根據 CDN_URL 格式化文件 URL。 |
routes/web.php |
Web 路由(主頁、文件展示、下載)。 |
routes/api.php |
API v1 路由。 |
resources/views/files/ |
用於文件列表和文件詳情的 Blade 視圖。 |
部署說明
當推送到 main 分支時,GitHub Actions 會執行以下操作:
- 使用
npm ci 和 npm run build 構建前端(Vite)。
- 使用 SCP 將
public/build/ 目錄複製到 Forge 服務器。
- 觸發 Laravel Forge 部署。
- 在服務器上運行
php artisan optimize:clear。
所需的倉庫密鑰:
FORGE_SSH_HOST — 服務器的 SSH 主機。
FORGE_SSH_USER — SSH 用戶(例如 forge)。
SSH_PRIVATE_KEY — 用於 SCP/SSH 的私鑰。
FORGE_SERVER_ID — Forge 服務器 ID。
FORGE_SITE_ID — Forge 站點 ID。
FORGE_API_KEY — Forge 部署令牌。
詳見 .github/workflows/deploy.yml。
開發者和機器人相關
基礎 URL
生產環境:https://blankfiles.com。支持 HTML 和 JSON 格式;在適用的情況下使用 Accept: application/json。
Web 路由
| 方法 |
路徑 |
描述 |
GET |
/ |
主頁:按類別列出文件。當 Accept: application/json 時返回 JSON 格式。限流:30 次/分鐘。 |
GET |
/upload-testing |
專注於二進制文件的上傳測試著陸頁,鏈接到高需求的文件格式和類別。 |
GET |
/files/{category}/{type} |
對 SEO 友好的文件詳情頁(例如 /files/document-spreadsheet/xlsx)。約束條件:category、type = [A-Za-z0-9\-]+。 |
GET |
/files/download/{category}/{type} |
下載代理:以 Content-Disposition: attachment 方式流式傳輸文件(文件名 blank.{type} 或 blank.{type}.zip)。限流:60 次/分鐘。 |
API 路由(前綴 api/v1)
| 方法 |
路徑 |
響應 |
GET |
/api/v1/files |
{ "files": [ ... ], "meta": { "version", "generated_at", "count" } }。 |
GET |
/api/v1/files/{type} |
相同的架構,按文件擴展名過濾。 |
GET |
/api/v1/files/{category}/{type} |
找到匹配項時返回包含一個條目的相同架構;未找到時返回 404。 |
GET |
/api/v1/status |
API 健康狀態 + 聚合目錄指標(file_count、type_count、category_count)和上游源信息。 |
機器友好說明
- 規範的文件目錄架構定義在 blank-files 倉庫中:
files/files.json(鍵 files,數組元素為 { type, url, category, package? })。
- 下載 URL:可使用 API 的
url 字段直接訪問 CDN,或使用 GET /files/download/{category}/{type} 進行同源下載並獲得可預測的文件名。
- API 響應和站點地圖支持條件請求(
ETag、Last-Modified)。
- 速率限制:基於公共 IP 的限制和可選的 API 密鑰限制(
X-API-Key)。
- API 使用分析日誌記錄到
storage/logs/api-usage-*.log(可配置通道)。
- 兼容性策略:API 策略。
- 增長頁面的 Web 著陸分析日誌記錄到
storage/logs/web-traffic-*.log。
客戶端代碼片段
curl -sS "https://blankfiles.com/api/v1/files/document-spreadsheet/xlsx" \
-H "Accept: application/json" \
-H "X-API-Key: $BLANKFILES_API_KEY"
const res = await fetch("https://blankfiles.com/api/v1/files", {
headers: { "Accept": "application/json", "If-None-Match": etag }
});
if (res.status === 304) {
}
import requests
r = requests.get("https://blankfiles.com/api/v1/status", timeout=20)
r.raise_for_status()
print(r.json())
兼容性策略
/api/v1/* 下的 URL 版本穩定。
- 重大變更需要新的主要 API 路徑版本。
- 棄用的端點在移除前至少保留 90 天。
- 可以添加新字段;客戶端應忽略未知字段。
相關項目
MCP 服務器(適用於代理市場/註冊表)
本倉庫現在包含一個最小的 MCP 服務器,將空白文件作為工具調用公開。
- 腳本:
scripts/mcp/blankfiles-mcp.mjs
- 運行:
npm run mcp:server
- 可選環境變量:
BLANKFILES_BASE_URL(默認值:https://blankfiles.com)
可用的 MCP 工具:
list_blank_files — 列出文件,可選過濾器(category、type、limit)
files_by_type — 按文件擴展名列出條目
file_by_category_type — 通過類別 + 擴展名進行確定性單查找
本地 MCP 客戶端配置示例:
{
"mcpServers": {
"blankfiles": {
"command": "node",
"args": ["/absolute/path/to/blankfiles-website/scripts/mcp/blankfiles-mcp.mjs"],
"env": {
"BLANKFILES_BASE_URL": "https://blankfiles.com"
}
}
}
}
註冊表提交輔助工具:
- 模板元數據:
scripts/mcp/registry/server.json.template
- 發佈清單:
scripts/mcp/registry/PUBLISHING.md
已發佈的包工作區:
packages/blankfiles-mcp(發佈為 @filearchitect/blankfiles-mcp)
OpenClaw 技能(ClawHub 可發現性)
本倉庫包含一個適用於 OpenClaw 的技能包:
- 技能路徑:
skills/blankfiles
- 技能入口:
skills/blankfiles/SKILL.md
- 發佈指南:
skills/blankfiles/references/publish.md
典型的發佈流程:
npm i -g clawhub
clawhub login
clawhub publish ./skills/blankfiles \
--slug blankfiles \
--name "Blank Files Gateway" \
--version 1.0.0 \
--changelog "Initial release" \
--tags latest
📄 許可證
本項目採用 MIT 許可證。