下面就为大家介绍如何使用Django配置阿里云OSS存储media文件的完整攻略。
1. 安装阿里云SDK和django-storages
首先需要安装阿里云SDK和Django的storage后端django-storages
。
可以使用以下命令安装:
pip install oss2 django-storages
2. 配置OSS存储服务
在阿里云OSS服务中创建Bucket,获取AccessKeyId和AccessKeySecret,以及Bucket的Endpoint和Bucket名称。
3. 在Django项目中配置settings.py
在settings.py
文件中增加以下代码:
DEFAULT_FILE_STORAGE = 'storages.backends.oss.OssStorage'
# 阿里云OSS相关配置
OSS_ENDPOINT = 'oss-cn-xxx.aliyuncs.com'
OSS_ACCESS_KEY_ID = 'your_access_key_id'
OSS_ACCESS_KEY_SECRET = 'your_access_key_secret'
OSS_BUCKET_NAME = 'your_bucket_name'
其中,OssStorage
是指使用OSS存储的storage后端,OSS_ENDPOINT
需要替换为您自己的Endpoint,OSS_ACCESS_KEY_ID
和OSS_ACCESS_KEY_SECRET
需要替换为您自己的AccessKeyId和AccessKeySecret,OSS_BUCKET_NAME
需要替换为您自己的Bucket名称。
4. 测试上传文件
在Django项目中编写上传文件的视图函数,如下所示:
from django.shortcuts import render
from django.core.files.storage import FileSystemStorage
def upload(request):
if request.method == 'POST' and request.FILES['file']:
# 使用FileSystemStorage保存到本地
fs = FileSystemStorage()
file = fs.save(request.FILES['file'].name, request.FILES['file'])
# 使用OssStorage保存到OSS
oss = fs.oss
filesystem = oss.listdir('')
oss.save(file, request.FILES['file'])
return render(request, 'upload.html', {'url': filesystem[0]})
return render(request, 'upload.html')
在这个视图函数中,通过FileSystemStorage
模块将上传的文件先保存到本地,然后使用OssStorage
将其保存到阿里云OSS。
在模板文件upload.html
中添加以下代码:
{% if url %}
<p>
文件已上传,链接为:<a href="{{url}}">{{url}}</a>
</p>
{% endif %}
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file">
<br><br>
<input type="submit" value="上传文件">
</form>
这里使用了Django内置的{% csrf_token %}
标签,用于防止跨站请求伪造攻击。
测试上传文件后,可以在阿里云OSS Bucket中查看到上传的文件,并且可以通过文件的链接进行访问。
5. 自定义存储路径
如果需要自定义文件的存储路径,可以在DEFAULT_FILE_STORAGE
之前增加以下代码:
from storages.utils import get_available_overwrite_name
def custom_upload_to(instance, filename):
# 在Bucket的根目录下创建以日期为名的文件夹,存放文件
folder_name = datetime.datetime.now().strftime('%Y%m%d')
path = '{}/{}'.format(folder_name, filename)
# 返回一个可用的名称,避免文件重名
return get_available_overwrite_name(path)
# 文件上传的子目录
MEDIAFILES_LOCATION = 'media'
# 自定义的存储路径
os.path.join(MEDIAFILES_LOCATION, custom_upload_to)
其中,MEDIAFILES_LOCATION
指定了存储文件的子目录,custom_upload_to
是一个自定义的上传路径函数,将文件存储到以日期为名的文件夹中。
通过以上步骤,我们就可以使用Django配置阿里云OSS存储media文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django 配置阿里云OSS存储media文件的例子 - Python技术站