Django 异常值:模块“storages.backends.gcloud”未定义“GoogleCloudMediaStorage”属性/类

Django 异常值:模块“storages.backends.gcloud”未定义“GoogleCloudMediaStorage”属性/类,django,google-cloud-storage,Django,Google Cloud Storage,我正在将媒体文件从运行在云引擎上的django应用上传到谷歌云存储。 但在提交文件时,我不断收到错误,上面的异常模块“storages.backends.gcloud”没有属性“GoogleCloudMediaStorage”是以下异常的直接原因: 以下是错误屏幕截图和代码片段,以了解更多详细信息。在这个问题上的任何帮助都是非常感谢的 设置.py from google.oauth2 import service_account GS_CREDENTIALS = service_account

我正在将媒体文件从运行在云引擎上的django应用上传到谷歌云存储。 但在提交文件时,我不断收到错误,上面的异常模块“storages.backends.gcloud”没有属性“GoogleCloudMediaStorage”是以下异常的直接原因:

以下是错误屏幕截图和代码片段,以了解更多详细信息。在这个问题上的任何帮助都是非常感谢的

设置.py

from google.oauth2 import service_account

GS_CREDENTIALS = service_account.Credentials.from_service_account_file(
os.path.join(BASE_DIR, 'credential.json'))
DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudMediaStorage'
GS_PROJECT_ID = 'project-test'
GS_BUCKET_NAME = 'project-bucket'
MEDIA_ROOT = '/media/'
UPLOAD_ROOT= 'media/cad_files'
MEDIA_URL = 'https://storage.googleapis.com/{}/'.format(GS_BUCKET_NAME)
gcloud.py是

from django.conf import settings
from storages.backends.gcloud import GoogleCloudStorage
from storages.utils import setting
from urllib.parse import urljoin

class GoogleCloudMediaStorage(GoogleCloudStorage):
       """
         Google file storage class which gives a media file path from MEDIA_URL not google generated one.
       """
       def __init__(self, *args, **kwargs):
            if not settings.MEDIA_URL:
                raise Exception('MEDIA_URL has not been configured')
            kwargs['bucket_name'] = setting('GS_BUCKET_NAME', strict=True)
            super(GoogleCloudMediaStorage, self).__init__(*args, **kwargs)

        def url(self, name):
            """.url that doesn't call Google."""
            return urljoin(settings.MEDIA_URL, name)
views.py

def file_upload(request): 
    if request.method == 'POST':
        form = FileForm(request.POST, request.FILES)
        if form.is_valid():
            file = form.save(commit=False) # commit=False Read file but Don't save the file yet
            file.uploaded_file = request.FILES['uploaded_file'] # Read file instance in model parameter
            file.customer = request.user.customer # Get current or logedin user
            file.save()
            file_analyze(file)
            return render(request, '/detail.html', {'jobs': jobs})
    else:
        form = FileForm()
    return render(request, 'upload.html', {'form': form})

我上传文件到gcp云的方法不同。也许我的方法可以帮助你。 我使用过python库

首先创建一个函数,然后可以在任何地方使用

from google.cloud import storage
import logging

def upload_file_to_bucket(file, filename):

saved_file_url = ''
is_file_uploaded = False
try:
    gcs = storage.Client()
    bucket = gcs.get_bucket('bucket_name')
    blob = bucket.blob(filename) # filename
    blob.upload_from_string(file.read())
    blob.make_public() # to make file public to internet
    saved_file_url = blob.public_url
    is_file_uploaded = True
except Exception as e:
    logging.info(e)

data = {'is_file_uploaded':is_file_uploaded, 'bucket_file_url': saved_file_url}
return data
在你的django看来

file = request.FILES['file']
file_name = file.name
data = upload_file_to_bucket(file, file_name)

您的GoogleCloudMediaStorage类在哪里实现对不起,这是我第一次将文件上载到存储。如图所示,Google CloudMediaStorage类在gcloud.py文件中定义。我需要在任何其他地方调用它吗?例如,模型?该文件放在项目中的何处,您是否在不属于您的包中实现了它?gcloud.py文件位于我的项目目录下,settings.py文件位于该目录下。那么,如果它不在,为什么要尝试将其设置为“storages.backends.gcloud.GoogleCloudMediaStorage”