Django Cloud Storage NoSuchKey

I deploy a Django/React project with GKE, Cloud SQL as DB, Cloud Storage for static file. When I trying upload files(both by Django admin and API), the url I get always tells me

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>

I tryed directly upload file in GCP console and file can be visited. Also when I use

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

file can be visited.

below are my 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/"

and 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

What I want is that when I upload by API or Django admin, I can find files in my bucket.

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