Django – 使用FileSystemStorage上传文件

Django – 使用FileSystemStorage上传文件

Django提供了FileSystemStorage类,该类有助于在本地存储文件,以便在开发中把这些文件作为媒体提供。在这篇文章中,我们将看到如何使用FileSystemStorage API实现一个文件上传系统,将文件存储在本地。
注意:这种方法只能在开发中使用,不能在生产中使用。

如何使用FileSystemStorage上传文件?

  • 第1步:我们将首先制作一个模板表格来上传文件。
    Template
<form method = 'POST' class="col s12" enctype="multipart/form-data">
 
        {% csrf_token %}
 
        {{new_form.as_p}}
 
    <!--Below is our main file upload input -->
        <input type = "file" name = 'document'>
        <p><button type = "submit" class = "waves-effect waves-light btn" style = "background-color: teal">Publish</button></p>
</form>
  • 在这里,请注意输入(用户可以通过它输入一个文件)的名称是 “document”。

  • 第2步:现在,我们将在views.py文件中编写相同的视图。
    View
    首先,在文件的顶部用以下方法导入FileSystemStorage类

from django.core.files.storage import FileSystemStorage
if request.method == "POST":
    # if the post request has a file under the input name 'document', then save the file.
    request_file = request.FILES['document'] if 'document' in request.FILES else None
    if request_file:
            # save attached file
 
            # create a new instance of FileSystemStorage
            fs = FileSystemStorage()
            file = fs.save(request_file.name, request_file)
            # the fileurl variable now contains the url to the file. This can be used to serve the file when needed.
            fileurl = fs.url(file)
 
return render(request, "template.html")
  • 在这里,FileSystemStorage类的构造函数接收参数 “location”,即您要存储文件的目录的路径。默认情况下,它是变量 “settings.MEDIA_ROOT “中的路径。它还需要一个参数’base_url’,它是你希望媒体对应的URL。默认情况下,它被设置为变量’settings.MEDIA_URL’的值(确保你在settings.py文件中设置了这些常量)。
    FileSystemStorage.save函数接收3个参数:名称、内容(文件本身)和max_length(默认值=无)。
    这个函数将文件–‘content’存储在’name’的名称下。如果存在一个同名的文件,那么它就对文件名进行一些修改,以产生一个独特的名字。
    在django文档中阅读更多关于FileSystemStorage类的构造参数和方法。

  • 第3步:定义MEDIA_ROOT和MEDIA_URL,如果尚未定义。
    Settings
    确保你在settings.py中配置了MEDIA_ROOT和MEDIA_URL。

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # media directory in the root directory
MEDIA_URL = '/media/'
  • 第4步:最后,我们为MEDIA_URL添加一个路由。
    URLs
    在urls.py中,导入
from django.conf.urls.static import static
from django.conf import settings
  • 并在文件的末尾添加以下内容
# only in development
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
  • 这将为MEDIA_URL添加一个路由,当用户向MEDIA_URL/(文件名)发出GET请求时,从MEDIA_ROOT提供文件。一旦完成这一切,上传的文件应该显示在MEDIA_ROOT常量中指定的目录中。

输出 –
前台看起来应该是这样的

Django - 使用FileSystemStorage上传文件

如前所述,这种方法只能用于开发中的媒体服务,不能用于生产。你可能想在生产中使用类似nginx的东西。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Django 教程