如何利用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
相关产品推荐
相关产品推荐

