文件托管与数字下载
BDX.market 上的文件托管与数字下载系统管理非序列号数字资产的分发,包括数字软件安装包、游戏客户端补丁、高清图形包、数字指南、定制游戏 mod 和电子文档。
为给孟加拉全国用户提供快速可靠的下载,同时防止盗链和未授权分发,BDX.market 结合安全的 Cloudflare R2 / S3 对象存储、限时签名 URL、带宽优化和病毒扫描验证。
1. 系统架构与基础设施
数字文件交付依靠隔离存储架构,将 Web 应用服务器与高带宽资源传输解耦。所有上传的卖家资源存放在对象存储的加密私有桶中,通过本地化 CDN 节点提供服务。
+------------------+ +-------------------+ +--------------------+
| Seller File Upload| ----> | Malware / Virus | ----> | Private S3 / R2 |
| (Dashboard) | | Scanner Service | | Bucket (No Public) |
+------------------+ +-------------------+ +--------------------+
|
v
+------------------+ +-------------------+ +--------------------+
| Direct Download | <---- | Short-Lived Signed| <---- | Buyer Requests File|
| From CDN Edge | | Delivery URL | | (Verified Purchase)|
+------------------+ +-------------------+ +--------------------+
技术亮点
- **私有对象存储:**文件以严格私有访问控制列表 (ACL) 存放。不存在公开直链;所有访问要求加密签名验证。
- **边缘 CDN 加速:**下载请求经服务南亚流量的 Cloudflare 边缘节点缓存和路由,在孟加拉国本地宽带和移动数据连接上最大化下载吞吐。
- **分块可断点续传:**支持 HTTP Range 请求,移动网络不稳定的买家可暂停和恢复数 GB 文件下载而不损坏。
2. 文件录入、恶意软件扫描与验证
为维护平台安全,卖家上传的所有文件在可购买或下载前经过严格的自动验证。
支持的文件格式与大小上限
| 资源类型 | 允许的扩展名 | 大小限制 | 存储层 |
|---|---|---|---|
| 软件与工具 | .exe、.msi、.zip、.7z、.tar.gz | 5.0 GB | 标准 R2 对象存储 |
| 数字指南与书籍 | .pdf、.epub | 500 MB | 标准 R2 对象存储 |
| 图形与美术包 | .zip、.psd、.png、.svg、.rar | 2.0 GB | 标准 R2 对象存储 |
| 游戏 Mod 与插件 | .zip、.rar、.pak | 10.0 GB | 高容量存储层 |
恶意软件与杀毒检查协议
卖家上传数字包后:
- **MIME 与扩展名验证:**服务器验证文件魔数,拦截伪装的可执行威胁(例如伪装成
.pdf的.exe)。 - **自动 ClamAV / VirusTotal 扫描:**扫描文件中的恶意软件、木马、挖矿程序和恶意脚本。
- **隔离状态:**上传资源在获得安全许可前保持
status = 'pending_scan'。未通过安全检查的资源自动清除,卖家账户标记为待审核。
3. 存储架构:digital_file_assets
数字资产元数据、文件校验和和交付统计记录在 digital_file_assets 表中。
CREATE TABLE `digital_file_assets` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`uuid` CHAR(36) NOT NULL UNIQUE,
`offer_id` BIGINT UNSIGNED NOT NULL,
`seller_id` BIGINT UNSIGNED NOT NULL,
`original_name` VARCHAR(255) NOT NULL,
`storage_path` VARCHAR(255) NOT NULL,
`mime_type` VARCHAR(255) NOT NULL,
`file_size_bytes` BIGINT UNSIGNED NOT NULL,
`sha256_checksum` CHAR(64) NOT NULL,
`scan_status` ENUM('pending', 'passed', 'failed') NOT NULL DEFAULT 'pending',
`download_count` INT UNSIGNED NOT NULL DEFAULT 0,
`created_at` TIMESTAMP NULL,
`updated_at` TIMESTAMP NULL,
FOREIGN KEY (`offer_id`) REFERENCES `seller_offers` (`id`) ON DELETE CASCADE,
FOREIGN KEY (`seller_id`) REFERENCES `users` (`id`)
);
经 SHA-256 的完整性验证
sha256_checksum 在上传完成时计算并显示在买家下载面板。买家可在本地对照该哈希验证下载文件,确保传输零损坏或篡改。
4. 签名 URL、盗链保护与带宽管理
为防止链接分享、未授权抓取和带宽盗用,文件访问依靠按需生成的短时 HMAC 签名 URL。
签名 URL 生成引擎
授权买家在订单面板(/orders/{order_id})点击 Download File(下载文件)后:
- 应用检查订单状态(
status IN ('paid', 'delivered', 'completed'))和买家授权。 - 服务器构建有效期恰好 15 分钟的临时签名 Amazon S3 / Cloudflare R2 URL。
- 响应发出
302 Found重定向,直达边缘 CDN 下载链接。
use Illuminate\Support\Facades\Storage;
public function generateDownloadUrl(DigitalFileAsset $file, User $buyer): string
{
// Verify buyer owns active order for this file asset
$hasValidOrder = BdxOrder::where('buyer_id', $buyer->id)
->where('offer_id', $file->offer_id)
->whereIn('status', ['paid', 'delivered', 'completed'])
->exists();
if (!$hasValidOrder) {
abort(403, 'Unauthorized access to digital download.');
}
// Generate temporary 15-minute signed S3/R2 URL
return Storage::disk('r2_private')->temporaryUrl(
$file->storage_path,
now()->addMinutes(15),
[
'ResponseContentDisposition' => 'attachment; filename="' . $file->original_name . '"',
'ResponseContentType' => $file->mime_type,
]
);
}
盗链保护与 IP 绑定
签名 URL 融入买家 IP 地址和会话令牌签名。如果买家试图在公开论坛或社交媒体发布签名链接:
- 试图访问该链接的外部用户被拒绝访问(
403 Forbidden)。 - 15 分钟后链接过期,强制二次请求回到 BDX 认证。
5. 下载记录、重新下载与访问权限到期
BDX.market 在维持存储治理的同时提供清晰的下载权利。
终身重新下载权限
订单确认后,买家直接在订单历史面板享受所购文件资源的无限重新下载权限。即使卖家 随后下架商品,历史买家保留所购版本的下载权限。
版本管理与卖家资源更新
如果卖家发布软件工具或数字书籍的更新版本(例如 v1.0 到 v1.2):
- 卖家在面板上传新的包修订版。
- 现有买家收到自动通知:"An updated version of your purchased asset is available."(您购买的资源有更新版本可用。)
- 版本历史日志保留原始和更新文件的访问权。