Изображения облачного хранилища google отличаются для аутентифицированного и публичного url
Я не могу понять, как возможно, что для GCS authenticated URL показывает другое изображение, чем public URL ?
Я загружаю изображения через скрипт python django
def upload_to_cloud(blob_name, file_obj):
file_type = imghdr.what(file_obj)
blob_name = str(blob_name) + '.' + file_type # concatenate string to create 'file_name.format'
stats = storage.Blob(bucket=bucket, name=blob_name).exists(client) # check if logo with the same reg.nr exists
if stats is True: # if exists then delete before uploading new logo
storage.Blob(bucket=bucket, name=blob_name).delete()
blob = bucket.blob(blob_name)
blob.upload_from_file(file_obj=file_obj, content_type=f'image/{file_type}')
path = blob.public_url
return path
class CompanyProfile(SuccessMessageMixin, UpdateView): # TODO why company logo differs from the one in ads_list?
model = Company
form_class = CompanyProfileCreationForm
def form_valid(self, form):
"""
Check if user uploaded a new logo. If yes
then upload the new logo to google cloud
"""
if 'logo' in self.request.FILES:
blob_name = self.request.user.company.reg_nr # get company registration number
file_obj = self.request.FILES['logo'] # store uploaded file in variable
form.instance.logo_url = upload_to_cloud(blob_name, file_obj) # update company.logo_url with path to uploaded file
company = Company.objects.get(pk=self.request.user.company.pk)
company.save()
return super().form_valid(form)
else:
return super().form_valid(form)
В общем случае один и тот же объект будет обслуживаться storage.googleapis.com
и storage.cloud.google.com
.
Единственное исключение - если есть какое-то кэширование (либо в браузере, либо в прокси, либо в Cloud CDN, либо в GCS). Если вы читаете объект через storage.cloud.google.com
перед загрузкой новой версии, то чтение после через storage.cloud.google.com
может обслуживать старую версию, в то время как storage.googleapis.com
возвращает новую. Кэширование также может зависеть от местоположения.
Если вы не можете позволить час кэширования, установите Cache control на no-cache
.