如何在Google云端存储中使用Django自定义存储后端?
尝试使用此功能:ckopanos's django-google-cloud-storage
根据文档,我在“settings.py”中添加了以下内容:
GOOGLE_CLOUD_STORAGE_BUCKET = [my bucket name] # the name of the bucket you have created from the google cloud storage console
GOOGLE_CLOUD_STORAGE_URL = [my bucket URL] #whatever the url for accessing your cloud storgage bucket
GOOGLE_CLOUD_STORAGE_DEFAULT_CACHE_CONTROL = [cache control] # default cache control headers for your files
DEFAULT_FILE_STORAGE = 'google.storage.googleCloud.GoogleCloudStorage'
我将'google'文件夹/包添加到我的项目文件中,因此它应该可以访问'settings.py'
如何在我的观看中使用此自定义存储系统?
我可以通过执行以下操作手动使用gcs(此示例在gcs上存储xlsx):
import cloudstorage as gcs
from google.appengine.api import app_identity
import xlsxwriter
import StringIO
bucket_name = os.environ.get('BUCKET_NAME',
app_identity.get_default_gcs_bucket_name())
bucket = '/' + bucket_name
filename = bucket + '/'+ userid + '/' + [some code] + '.xlsx'
gcs_file = gcs.open(filename,
'w',
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
options={'x-goog-meta-user': userid})
output = StringIO.StringIO()
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
worksheet = workbook.add_worksheet()
worksheet.write(0, 0, 'Hello World')
# Close the workbook before streaming the data.
workbook.close()
# Rewind the buffer.
output.seek(0)
gcs_file.write(output.read())
gcs_file.close()
如何导入存储系统以在我的视图中使用?你会为Django和GCS建议一个不同的存储系统吗?
答案 0 :(得分:1)
就像你在Django中使用任何其他文件存储系统一样,因为Django中的自定义存储后端是通过定义一个必须是subclass of django.core.files.storage.Storage
的自定义存储类来构建的。
django-cloud-storage,是一个自定义存储后端,允许您在Django中使用GCS,就像您使用任何其他存储后端一样。
DEFAULT_FILE_STORAGE = 'google.storage.googleCloud.GoogleCloudStorage'
settings.py中的上述一行使GCS成为默认的文件存储系统。
这意味着如果您在FileField
中定义新的models
,它将使用Google云端存储。
您可以在以下视图中使用它:
from django.core.files.storage import default_storage
file = default_storage.open(file_name, 'w')
file.write(output.read())
file.close()
该文件将保存到您的默认存储桶中。