美文网首页
Django 文件上传

Django 文件上传

作者: eeert2 | 来源:发表于2019-10-22 09:21 被阅读0次

Django 文件上传

利用Django实现文件上传并且保存到指定路径下,其实并不困难,完全不需要用到django的forms,也不需要django的models,就可以实现,下面开始实现。

第一步:

在模板文件中,创建一个form表单,需要特别注意的是,在有文件上传的form表单中,method属性必须为post,而且必须指定它的enctype"multipart/form-data",表明不对字符进行编码,具体的代码如下:

<form enctype="multipart/form-data" action="/uploadFile/" method="post">
   <input type="file" name="myfile" />
   <br/>
   <input type="submit" value="upload"/>
</form>
上传文件

第二步:

设置urls.py文件,指定相应的视图函数进行处理

urlpatterns = [
  url(r'^$', views.index), #网站页面
  url(r'^uploadFile/', views.upload_file), #上传函数
]

第三步:

最重要的,在视图函数中做处理,可以实现任何格式文件的上传

def upload_file(request): 
    if request.method == "POST":    # 请求方法为POST时,进行处理 
        # 获取上传的文件,如果没有文件,则默认为None 
        myFile =request.FILES.get("myfile", None)    
        if not myFile: 
            return HttpResponse("no files for upload!") 
        # 打开特定的文件进行二进制的写操作 
        destination = open(os.path.join("E:\\upload",myFile.name),'wb+')    
        for chunk in myFile.chunks():      # 分块写入文件 
            destination.write(chunk) 
        destination.close() 
        return HttpResponse("upload over!") 

这里需要对上面视图函数中的代码进行详细的解释一番:

首先,对于上传的文件,虽然是通过POST的方式上传的,但是不能通过request.POST["myfile"]或者request.POST.get("myfile", None),这两种方式来访问,这里需要使用另外一种方式,就是:

request.FILES["myfile"] 或者 request.FILES.get("myfile", None)

因为上传的文件是保存在FILES这个字典中的


image.png

接下来,需要判断用户是不是真的上传了文件,如果用户仅仅只是点了 一下upload按键,那么就提示他没有上传文件。

下面是最重要的部分,现在已经得到了文件了,但是文件在内存中,没有写到硬盘里面去,接下里需要完成的就是把文件写入到硬盘

其实上传文件,就是把硬盘里面某个文件的数据,写入到服务器指定的文件中,在最底层不管是txt文件还是exe文件等,全都是二进制的数据,这里所要做的只是将已经上传了的文件的数据,以二进制的方式写入到服务器指定的文件中,这个文件可以随意命名。

比如可以将上传的123.exe文件,保存为abc.txt,但是这毫无意义,对于上传的123.exe,在服务器上也应该是123.exe。其实在这里所说的abc.txt和123.exe的内容是完全一样的,只需要将abc.txt的文件后缀改为exe就行了。

在进行进一步的代码解释之前,需要先讲几个关于上传文件的方法和属性:

myFile.read():从文件中读取整个上传的数据,这个方法只适合小文件;
myFile.chunks():按块返回文件,通过在for循环中进行迭代,可以将大文件按块写入到服务器中;
myFile.multiple_chunks():这个方法根据myFile的大小,返回True或者False,当myFile文件大于2.5M(默认为2.5M,可以调整)时,该方法返回True,否则返回False,因此可以根据该方法来选择选用read方法读取还是采用chunks方法:
myFile.name:这是一个属性,不是方法,该属性得到上传的文件名,包括后缀,如123.exe;
myFile.size:这也是一个属性,该属性得到上传文件的大小。

在这里对小文件与大文件(2.5M以上)的写入方式是不同的

if myFile.multiple_chunks() == False:
   # 使用myFile.read()
   # 小文件也可以分块的写入,但是使用 read() 更快
else:
   # 使用myFile.chunks()

数据写完之后关闭文件就可以了

destination.close()。

相关文章

  • Django 文件上传

    Django 文件上传 利用Django实现文件上传并且保存到指定路径下,其实并不困难,完全不需要用到django...

  • Django上传文件

    继前文的项目准备中,涉及到上传歌曲,所以有了这一过程,在项目目录下设置了资源文件夹暂存歌曲,完场云端上传后即删除所...

  • Django文件上传

    实例:为用户上传头像并回显 设置上传文件保存目录 定义Model,完成移植并执行 定义form表单 创建文件上传视...

  • Django文件上传

    本篇主要讲的是ajax下的文件上传 模板html文件内容 编写文件上传js 服务器端视图代码如下 POST提交过来...

  • 5.4 django 表单 文件上传

    文件上传: 文件上传是网站开发中非常常见的功能。这里详细讲述如何在Django中实现文件的上传功能。 前端HTML...

  • 最浅显易懂的Django系列教程(37)-文件上传

    文件上传: 文件上传是网站开发中非常常见的功能。这里详细讲述如何在Django中实现文件的上传功能。 前端HTML...

  • django 补充

    django 上传文件, 上传文件也可以过检测,不过要记得添加 request.FILES 到定制的form类中,...

  • el-upload + Django实现文件上传

    由于项目展示信息有图片,需要自己实现文件上传,通过django+vue+element-ui,实现文件上传服务+上...

  • 文件上传

    当Django在处理文件上传的时候,文件数据被保存request.FILES 。这篇文档阐述文件如何上传到内存和硬...

  • Django入门:实现一个页面同时上传文本和图片,并保存至MyS

    Django实现一个页面上传Char和Image至后台MySQL 网上关于Django文件上传的教程,大多数使用单...

网友评论

      本文标题:Django 文件上传

      本文链接:https://www.haomeiwen.com/subject/smhkuctx.html