Облачное хранилище 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-адреса только с помощью токена доступа (способ, используемый вашим приложением по умолчанию). Таким образом, вы можете либо:
- Настроить приложение на использование I AM Sign Blob API. Предпочтительный способ, минимальные изменения, но есть ограничения по квоте;
- Настройте приложение на использование подключенного закрытого ключа учетной записи службы. Дополнительные действия могут быть менее безопасными.
Пожалуйста, внимательно прочтите руководство, которое вы прикрепили, начиная с раздела Настройки аутентификации. Здесь вы найдете все ответы.
<время работы/>При переходе к администратору Django появляется ошибка атрибута
Значение исключения:
вам нужен закрытый ключ для подписи учетных данных.учетные данные, которые вы используете в данный момент, относятся к классу "google.auth.compute_engine.credentials".Учетные данные" просто содержат токен. видишь https://googleapis.dev/python/google-api-core/latest/auth.html#setting-up-a-service-account > для получения более подробной информации.
В вашем руководстве написано:
Если ваше приложение обрабатывает подписанные (истекающие) URL-адреса, ознакомьтесь с параметрами в настройках подписанных URL-адресов в следующем разделе