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

如何在Google Cloud Storage v4签名URL中限制文件上传大小?

解决GCS V4签名URL限制上传文件大小的问题

V4版本的签名URL不再支持V2中的conditions参数,要实现文件大小限制,需通过绑定请求头约束的方式完成,具体方案如下:

核心逻辑

GCS V4签名URL会对请求的关键要素(请求方法、资源路径、指定请求头等)进行签名,客户端必须严格匹配这些要素才能完成上传。我们可以将x-goog-content-length-range请求头加入签名约束,强制客户端上传时指定文件大小范围,GCS会自动校验文件实际大小是否符合该范围。

修改后的代码实现

将原代码中的conditions参数替换为headers,指定x-goog-content-length-range头的取值:

# 修改后的签名URL生成代码
from google.cloud import storage
from django.conf import settings
from datetime import timedelta

class GcsHandler:
    def __init__(self):
        self.bucket_name = settings.GS_BUCKET_NAME
        self.storage_client = storage.Client()
        self.bucket = self.storage_client.bucket(self.bucket_name)

    def generate_signed_url(self, blob_name: str, content_type: str, file_size: int) -> str:
        """
        Generate a signed URL for a blob to upload a file with a specific size limit.

        :param blob_name: The path to the GCS file.
        :param content_type: The content type of the file.
        :param file_size: The exact file size limit for the upload.
        :return: The signed URL.
        """
        blob = self.bucket.blob(blob_name)
        # 构造大小限制的请求头,格式为"min_size,max_size",此处设为精确大小
        size_range_header = f"{file_size},{file_size}"
        url = blob.generate_signed_url(
            version="v4",
            expiration=timedelta(minutes=60),
            method="PUT",
            content_type=content_type,
            # 指定必须包含的请求头,将大小限制加入签名约束
            headers={
                "x-goog-content-length-range": size_range_header
            }
        )
        return url

客户端上传要求

使用生成的签名URL上传文件时,必须在请求中携带x-goog-content-length-range头,且取值要和签名时指定的一致,否则GCS会拒绝请求。示例curl命令:

curl -X PUT -H "Content-Type: image/jpeg" -H "x-goog-content-length-range: 1024,1024" --data-binary @test.jpg "生成的签名URL"

补充说明

  • 若需允许一定的大小范围(如100KB到1MB),只需将size_range_header设为"102400,1048576"即可。
  • 该方式通过签名验证确保客户端无法篡改大小限制参数,保证约束的有效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:34:52