update
我找到了这个, https://django-storages.readthedocs.io/en/latest/backends/gcloud.html 由于我的django是5.1,所以我修改了设置。
STORAGES = {
"default": {
"BACKEND": "storages.backends.gcloud.GoogleCloudStorage",
"OPTIONS": {
"bucket_name": "erp-backend",
"location": "media",
"project_id": "smart-portfolio-412002",
},
},
"staticfiles": {
"BACKEND": "storages.backends.gcloud.GoogleCloudStorage",
"OPTIONS": {
"bucket_name": "erp-backend",
"location": "static",
},
},
}
STATIC_URL = "https://storage.googleapis.com/erp-backend/static/"
MEDIA_URL = "https://storage.googleapis.com/erp-backend/media/"
现在,我可以在存储桶中找到DRF API上传的文件。但是当去django管理员时,有属性
Exception Value:
you need a private key to sign credentials.the credentials you are currently using <class 'google.auth.compute_engine.credentials.Credentials'> just contains a token. see https://googleapis.dev/python/google-api-core/latest/auth.html#setting-up-a-service-account for more details.
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>
我尝试在GCP控制台中直接上传文件,并可以访问文件。 当我使用
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_URL = f"https://storage.googleapis.com/{GS_BUCKET_NAME}/static/"
MEDIA_URL = f"https://storage.googleapis.com/{GS_MEDIA_BUCKET_NAME}/media/"
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(您的应用程序使用默认方式)。因此,您可以:
Configure应用程序使用
IAM符号blobapi请读取您附加的
您需要一个私钥来签名凭据。您当前使用的凭证仅包含一个令牌。有关更多详细信息 您的指南说: 如果您的应用程序处理已签名(到期)URL,则在以下部分中读取签名URL的选项。