📜  Django – 使用 FileSystemStorage 上传文件(1)

📅  最后修改于: 2023-12-03 15:14:43.599000             🧑  作者: Mango

Django – 使用 FileSystemStorage 上传文件

在 Django 中,使用 FileSystemStorage 实现文件上传功能,该类默认会将用户上传的文件保存在 MEDIA_ROOT 目录下。

配置

首先,需要在 settings.py 文件中配置 MEDIA_ROOTMEDIA_URL

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

然后在项目的 urls.py 文件中添加以下代码:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ...
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这将会启用 Django 的调试工具,在调试时,能够直接从网页中访问该目录下的文件。

文件上传

使用 FileSystemStorage 可以轻松实现文件上传功能,首先需要在 views.py 文件中导入 FileSystemStorage 类:

from django.core.files.storage import FileSystemStorage

然后在 views.py 文件中编写文件上传的逻辑代码:

def upload(request):
    if request.method == 'POST' and request.FILES['file']:
        file = request.FILES['file']
        fs = FileSystemStorage()
        fs.save(file.name, file)
        return HttpResponse('上传成功!')
    return render(request, 'upload.html')

这段代码中,我们首先检查请求的方法是否为 POST,并且检查是否有文件上传。然后创建了一个 FileSystemStorage 实例,并使用 save 方法将文件保存在 MEDIA_ROOT 目录下。

最后,我们需要编写对应的 HTML 模板文件 upload.html,其中包含了一个表单,用来上传文件:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="file" id="file"><br>
    <input type="submit" value="上传">
</form>
总结

使用 Django 的 FileSystemStorage 可以轻松实现文件上传功能,通过配置 MEDIA_ROOTMEDIA_URL 可以控制文件保存目录和访问路径。同时,要注意在视图函数中使用 request.FILES,获取上传的文件对象并保存。