由于BAE(or SAE/GAE等)中代码上传是有限制的,所以要使用云存储来放置media上传的图片,文件等等。
BAE中有提供BCS云存储,不过没有免费限额,对于小网站不划算,所以本网站目前采用七牛云存储。
那么问题来了:BAE的python requirements当然不支持竞争对手了。
解决方法:
把qiniu这个文件包直接放置在你项目的目录中(与其他app同级)
运行会发现缺少requests,这个BAE中支持,填到requirements中就可以了
这样就能支持qiniu python了,不过要怎么使用呢?
刚好github上面有人提供了django-qiniu-storage
使用方法:
与qiniu放置在同一个目录(其他也可以)
在settings.py中添加如下代码
MEDIA_URL = '
QINIU_ACCESS_KEY = 'xxxxxxxx'
QINIU_SECRET_KEY = 'xxxxxxxx'
QINIU_BUCKET_NAME = 'you-bucketname'
QINIU_BUCKET_DOMAIN = MEDIA_URL
DEFAULT_FILE_STORAGE = 'qiniustorage.backends.QiniuStorage'
这样全部的文件存储都使用七牛了,如果想单独配置,可以在model中的Field添加storage=’QiniuStorage()’
def _put_file(self, name, content):
token = self.auth.upload_token(self.bucket_name)
ret, info = put_data(token, name, content)
#if ret['key']!= name: #注释掉这两句
# raise QiniuError(info)
以上就能在BAE上使用七牛云存储了。使用BCS等其他可参考django-qiniu-storage中Storage的重写方法。
注意:你会发现当在admin中删除文件的时候,云存储并不会删掉文件。处理方法请参考Django中delete_selected删除文件的方法