python django文件图片上传与下载

今天小编将为大家带来在django中如何通过网络进行文件的上传和下载,我们直接进入正文.

首先,前端通过表单将文件进行上传,上传到后端后,后端通过对上传文件进行读取写入到磁盘.

我们使用django的模板制作一个表单作为文件的上传,打开settings配置文件,配置templates.

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [os.path.join(BASE_DIR, "templates")],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
            ],
        },
    },
]

配置完成后在项目目录下建一个templates目录和static目录(用来存放上传的文件),templates目录里面存放一个index.html文件里面是上传的表单.

index.html:

<html>
<head>

</head>
<body>
    <form method="post" action="http://localhost:8000/twoshop/media/" enctype="multipart/form-data">
        <label for="file">点击上传文件</label>
        <input type="file" id="file" name="file">
    <input type="submit">
    </form>
</body>
</html>

其中表单必须带有enctype="multipart/form-data"属性可以发送文本数据和二进制数据.在我们先前注册的应用中写一个接口来访问表单,表单向另一个接口去发送数据.

首先在包含settings配置文件的与项目同名的目录中使用include将来自以"/"开头的请求发送给app.urls(这个地方写成你注册的app应用即可,我本机建的app应用所以写的app.urls)处理.

from django.urls import path,include

urlpatterns = [
    path("/",include("app.urls")),
]

下面是app.urls(写成你注册应用的urls)的配置,写两个接口一个负责发送数据,一个负责下载数据:

from django.urls import path
from . import views

urlpatterns = [
    #上传数据
    path('senddata/', views.senddata, name='senddata'),
    #得到上传的数据进行下载    
    path('adddata/', views.add_data, name='adddata')
]

在这个文件的同级目录下的view.py文件就可以写业务代码了:

def senddata(request):
    return render(request,'index.html')

def add_data(request):
    if request.method == 'POST':
        file=request.FILES['file']
        file_group=file.name.split('.')
        with open('static/%s.%s' % (file_group[0],file_group[1]),'wb') as fq:
           for chunk in file.chunks():
               fq.write(chunk)
        return HttpResponse('上传成功')

将上传的文件从request.FILES中进行下载到一个新的文件时,要防止写入文件时溢出内存区,所以使用file.chunks()来循环分块读取来写入文件.(写的很匆忙,如果有错请见谅.)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值