You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

谷歌云Compute Engine部署Laravel项目:如何防止视频被下载

解决方案:基于谷歌云实现视频可播放但禁止下载

1. 迁移存储到谷歌云存储(GCS)

当前VM本地存储的方式无法有效限制下载行为,必须将视频迁移至GCS——它提供细粒度的访问控制、签名URL等核心功能,是实现需求的基础。

2. 配置GCS存储桶权限

  • 创建非公开存储桶,彻底关闭所有公共访问权限,确保视频默认无法被直接访问。
  • 为Compute Engine的VM服务账号分配storage.objectViewer角色,让Laravel应用能正常读取存储桶内的视频文件。

3. 用签名URL实现临时授权播放

签名URL可生成带有效期的临时访问链接,能精准控制访问规则,防止直接下载:

  • 在Laravel中调用谷歌云存储SDK,生成URL时指定GET方法、合适的有效期(比如1小时),同时设置response-content-disposition为inline,强制浏览器在线播放而非触发下载。
  • 示例代码(Laravel环境):
use Google\Cloud\Storage\StorageClient;

$storage = new StorageClient([
    'keyFilePath' => storage_path('app/gcs-service-account.json')
]);
$bucket = $storage->bucket('你的存储桶名称');
$object = $bucket->object('uploads/Videos_Published/Earth_Science/659d4fd65bc53_cropped.mp4');

// 生成1小时有效期的签名URL,强制在线播放
$signedUrl = $object->signedUrl(
    new \DateTime('+1 hour'),
    [
        'method' => 'GET',
        'responseContentDisposition' => 'inline; filename="659d4fd65bc53_cropped.mp4"'
    ]
);
  • 将生成的签名URL存入数据库,前端播放器直接使用该URL加载视频,而非原公开链接。

4. 额外防护措施

  • 配置GCS存储桶的CORS规则,仅允许你的应用域名发起请求,防止其他网站非法嵌入视频:
    [
        {
            "origin": ["https://你的应用域名.com"],
            "method": ["GET"],
            "responseHeader": ["Content-Type"],
            "maxAgeSeconds": 3600
        }
    ]
    
  • 给Laravel添加自定义中间件,验证请求来源或用户身份,仅向合法用户发放签名URL(若视频需权限访问)。
  • 借助Cloud Transcoder API将视频转码为HLS切片格式,即使有人尝试下载,也只能获取零散切片,无法直接拿到完整视频文件。

5. 进阶优化:搭配谷歌云CDN

若需提升全球播放速度,可为GCS存储桶配置Cloud CDN,通过CDN生成签名URL——既保留访问控制能力,又能利用CDN缓存降低源站压力、提升播放流畅度。

内容的提问来源于stack exchange,提问作者Vinod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:54:57