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

如何利用Google Cloud签名URL限制上传文件大小(NodeJS SDK场景)

如何利用Google Cloud签名URL限制上传文件大小(NodeJS SDK场景)

嘿,这个问题我刚好在项目里处理过好几次,其实用NodeJS SDK生成签名URL时,只需要在配置里加个核心参数就能搞定文件大小限制,操作起来很直接:

  • 首先确保你已经安装了官方的Storage SDK包,如果还没装,先跑这个命令:

    npm install @google-cloud/storage
    
  • 生成签名URL的核心是在getSignedUrl的配置选项里,添加contentLengthRange参数——它是一个数组,分别定义允许上传的最小和最大字节数。

给你一个可直接复用的代码示例:

const { Storage } = require('@google-cloud/storage');
// 初始化Storage客户端,如果你是在GCP环境里运行,默认会自动获取凭据
const storage = new Storage();

async function generateSizeRestrictedSignedUrl(bucketName, targetFileName, maxAllowedSizeBytes) {
  const signedUrlOptions = {
    version: 'v4', // 推荐用v4版本的签名URL,兼容性和安全性更好
    action: 'write', // 因为是上传操作,所以action设为write
    expires: Date.now() + 15 * 60 * 1000, // 设15分钟过期,可根据你的业务需求调整时长
    // 重点:这里设置文件大小范围,0表示允许空文件,第二个值是你要限制的最大字节数
    contentLengthRange: [0, maxAllowedSizeBytes] 
  };

  try {
    const [signedUrl] = await storage
      .bucket(bucketName)
      .file(targetFileName)
      .getSignedUrl(signedUrlOptions);
    
    console.log('带大小限制的签名上传URL已生成:', signedUrl);
    return signedUrl;
  } catch (err) {
    console.error('生成签名URL时出错:', err);
    throw err;
  }
}

// 调用示例:限制最大上传10MB(10*1024*1024 = 10485760字节)
generateSizeRestrictedSignedUrl('你的存储桶名称', '要上传的文件名.png', 10 * 1024 * 1024)
  .catch(err => process.exit(1));

最后再补充个关键细节:这个限制是由Google Cloud Storage服务端强制执行的,哪怕客户端尝试篡改请求头里的文件大小,只要实际上传的文件字节数超出范围,Storage就会直接返回400错误拒绝上传,所以安全性完全有保障,不用怕客户端绕过限制~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 03:08:05