Облачное хранилище Django NoSuchKey

Я развертываю проект на Django/ React с использованием GKE, облачного SQL в качестве базы данных, облачного хранилища для статических файлов. Когда я пытаюсь загрузить файлы (как с помощью администратора Django, так и с помощью API), URL-адрес, который я получаю, всегда говорит мне

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Details>No such object: my-bucket/media/uploads/01.JPG</Details>
</Error>

Я попробовал напрямую загрузить файл в консоль DHCP, и файл можно просмотреть. Также, когда я использую

gsutil cp .gitignore gs://my-bucket/media/

файл доступен для просмотра.

ниже приведены мои settings.py


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.1/howto/static-files/

DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
STATICFILES_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'

GS_BUCKET_NAME = 'my-bucket'
GS_MEDIA_BUCKET_NAME = 'my-bucket'
GS_DEFAULT_ACL = 'publicRead'
GS_FILE_OVERWRITE = False

# STATIC_ROOT = '/app/static'
STATIC_URL = f"https://storage.googleapis.com/{GS_BUCKET_NAME}/static/"
MEDIA_URL = f"https://storage.googleapis.com/{GS_MEDIA_BUCKET_NAME}/media/"

и deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      serviceAccountName: my-service-account
      containers:
      - name: app
        image: asia-east1-docker.pkg.dev/my-project-id/app/backend:latest
        ports:
        - containerPort: 8000
        env:
          - name: DB_USER
          - name: DB_PASSWORD
          - name: DB_NAME
          - name: DB_HOST
          - name: DB_PORT
        resources:
          requests:
            memory: "512Mi"
            cpu: "500m"
          limits:
            memory: "1Gi"
            cpu: "1"
      - name: cloud-sql-proxy
        image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest
        args:
        volumeMounts:
          - name: cloudsql
            mountPath: /cloudsql
        securityContext:
          runAsNonRoot: true
        resources:
          requests:
            memory: "256Mi"
            cpu: "100m"
          limits:
            memory: "512Mi"
            cpu: "250m"
      volumes:
      - name: cloudsql
        emptyDir:
          medium: Memory

Я хочу, чтобы при загрузке с помощью API или администратора Django я мог находить файлы в своей корзине.

Ошибки, которые вы получаете, связаны с настройками авторизации вашего приложения. Вы не можете подписывать URL-адреса только с помощью токена доступа (способ, используемый вашим приложением по умолчанию). Таким образом, вы можете либо:

  1. Настроить приложение на использование I AM Sign Blob API. Предпочтительный способ, минимальные изменения, но есть ограничения по квоте;
  2. Настройте приложение на использование подключенного закрытого ключа учетной записи службы. Дополнительные действия могут быть менее безопасными.

Пожалуйста, внимательно прочтите руководство, которое вы прикрепили, начиная с раздела Настройки аутентификации. Здесь вы найдете все ответы.

<время работы/>

При переходе к администратору Django появляется ошибка атрибута

Значение исключения:
вам нужен закрытый ключ для подписи учетных данных.учетные данные, которые вы используете в данный момент, относятся к классу "google.auth.compute_engine.credentials".Учетные данные" просто содержат токен. видишь https://googleapis.dev/python/google-api-core/latest/auth.html#setting-up-a-service-account > для получения более подробной информации.

В вашем руководстве написано:

Если ваше приложение обрабатывает подписанные (истекающие) URL-адреса, ознакомьтесь с параметрами в настройках подписанных URL-адресов в следующем разделе

Вернуться на верх