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