如何缩短Google Cloud Storage URL或使用自定义域名(Django后端)
解决GCS URL过长无法短信分享的方案(Django后端)
一、改用GCS公开访问URL(最简单方案,适合可公开的文件)
你当前的URL是带签名参数的临时访问链接,长度主要来自签名串。如果你的图片/PDF允许公开访问:
- 进入Google Cloud Console,找到对应存储桶,设置目标文件或整个文件夹的权限为公共读取(添加
allUsers角色为Storage Object Viewer) - 此时文件的公开URL格式为:
比如你的示例文件会变成:https://storage.googleapis.com/[你的存储桶名]/[文件路径]
比原签名URL短很多,且无过期时间。https://storage.googleapis.com/mob-uat-server/products/images/Polycab/Polycab%20Elanza%20NEO%20Storage%20Water%20Heater%2C%2015%20L%20%28POL-ElanzaNeo-15%29/129LEG115.jpeg
二、绑定自定义域名到GCS(品牌化+缩短域名)
如果需要用自己的域名替代默认的storage.googleapis.com,步骤如下:
- 域名验证:在Google Cloud Console的「Cloud Storage」→「设置」→「自定义域名」中,添加你的自定义域名(比如
cdn.yourdomain.com),按照提示完成域名所有权验证(通常是添加TXT记录到DNS) - DNS配置:在域名服务商处添加CNAME记录,将
cdn.yourdomain.com指向c.storage.googleapis.com - HTTPS配置:启用Google管理的SSL证书,确保访问是HTTPS(GCS会自动处理证书颁发和续期)
- 配置完成后,文件访问URL变为:
不仅缩短了域名部分,还能使用更简洁的品牌域名。https://cdn.yourdomain.com/[文件路径]
三、Django后端自建短链服务(最灵活,适合需控制访问的场景)
如果文件不能公开,需要保留签名URL但缩短长度,可以在Django中实现自己的短链系统:
1. 创建短链模型
在Django app的models.py中添加:
from django.db import models import string import random def generate_short_code(): chars = string.ascii_letters + string.digits while True: code = ''.join(random.choice(chars) for _ in range(6)) if not ShortURL.objects.filter(short_code=code).exists(): return code class ShortURL(models.Model): original_url = models.URLField(max_length=2048) short_code = models.CharField(max_length=10, unique=True, default=generate_short_code) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.short_code
2. 创建重定向视图
在views.py中添加:
from django.shortcuts import redirect, get_object_or_404 from .models import ShortURL def redirect_short_url(request, short_code): short_url = get_object_or_404(ShortURL, short_code=short_code) return redirect(short_url.original_url)
3. 配置URL路由
在项目的urls.py中添加:
from django.urls import path from .views import redirect_short_url urlpatterns = [ # 其他路由... path('s/<str:short_code>/', redirect_short_url, name='short_url_redirect'), ]
4. 生成短链
在需要生成短链的地方(比如生成GCS签名URL后),创建ShortURL实例:
from .models import ShortURL # 假设gcs_signed_url是你生成的GCS签名URL short_url_obj = ShortURL.objects.create(original_url=gcs_signed_url) short_link = f"https://yourdomain.com/s/{short_url_obj.short_code}"
生成的短链类似https://yourdomain.com/s/abc123,长度极短,适合短信分享。
内容的提问来源于stack exchange,提问作者Abhijeet Gupta
相关产品推荐
相关产品推荐

