Django实现文件的上传

Posted 许二

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django实现文件的上传相关的知识,希望对你有一定的参考价值。

需求:自己写一个文件上传功能

代码:

urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views


urlpatterns = [
    url(r\'^admin/\', admin.site.urls),
    url(r\'^upload.html$\', views.upload),
]

views.py

from django.shortcuts import render
from django.shortcuts import redirect
from django.shortcuts import HttpResponse
from app01 import models
import os

#实现文件上传功能
def upload(request):
    if request.method == \'GET\':
        return render(request,\'upload.html\')
    elif request.method == \'POST\':
        obj = request.FILES.get(\'fafafa\')
        f = open(os.path.join(\'upload\',obj.name),\'wb\')
        for line in obj.chunks():
            f.write(line)
        f.close()
        return HttpResponse(\'上传成功\')

upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/upload.html" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="fafafa" />
    <input type="submit" value="上传" />
</form>
</body>
</html>

运行结果:


 文件上传:

  -普通上传

  -自定义页面上传按钮

  -基于Form做上传

  -Ajax上传文件(后补)

 

升级版

settings.py

STATIC_URL = \'/static/\'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR,\'static\'),
) 

urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r\'^admin/\', admin.site.urls),
    url(r\'^upload.html$\', views.upload),
]

views.py

from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.forms import fields
from django import forms


class UploadForm(forms.Form):
    user = fields.CharField()
    img = fields.FileField()

def upload(request):
    if request.method == \'GET\':
        return render(request,\'upload.html\')
    else:
        # obj = UploadForm(request.POST,request.FILES)
        # if obj.is_valid():
        #     user = obj.cleaned_data[\'user\']
        #     img = obj.cleaned_data[\'img\']
        user = request.POST.get(\'user\')
        img  = request.FILES.get(\'img\')
        # img是对象(文件大小,文件名称,文件内容。。。)
        print(img.name)
        print(img.size)
        f = open(img.name,\'wb\')
        for line in img.chunks():
            f.write(line)
        f.close()
        return HttpResponse(\'...\')

upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/upload.html" method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="text" name="user" />
        <div style="position: relative">
            <a>NB上传</a>
            <input type="file" name="img" style="opacity: 0;position:absolute;top:0;left: 0;" />
        </div>
        <input type="submit" value="提交" />
    </form>
</body>
</html>

运行效果:

 

以上是关于Django实现文件的上传的主要内容,如果未能解决你的问题,请参考以下文章

[django]modelform实现的多文件上传

django实现文件上传(最简单的方法)

如何使用django restfulframework 实现文件上传

java Ftp上传创建多层文件的代码片段

django实现文件上传到服务器

django实现文件上传删除下载