重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章将为大家详细讲解有关使用Django怎么实现文件上传下载功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
成都创新互联主营乌尔禾网站建设的网络公司,主营网站建设方案,app软件开发公司,乌尔禾h5小程序制作搭建,乌尔禾网站营销推广欢迎乌尔禾等地区企业咨询创建项目:
django-admin startproject file_upload cd file_upload python manage.py startapp uploader
目录结构:
0.settings.py
LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False
1.urls.py
父:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('uploader/', include('uploader.urls')) ]
子:
from django.contrib import admin from django.urls import path, include from . import views app_name = 'uploader' urlpatterns = [ path('', views.upload, name='upload'), # 上传 path('list/', views.list), # 列表 path('download/', views.download, name='download'), # 下载 path('delete/ ', views.delete, name='delete'), # 删除 ]
2.models.py
from django.db import models from django.utils import timezone ''' 文件记录 ''' class FileInfo(models.Model): file_name = models.CharField(max_length=500) file_size = models.DecimalField(max_digits=10, decimal_places=0) file_path = models.CharField(max_length=500) upload_time = models.DateTimeField(default=timezone.now())
3.forms.py
from django import forms ''' 上传表单 ''' class UploadForm(forms.Form): file = forms.FileField( widget=forms.ClearableFileInput(attrs={'multiple': True}), # 支持多文件上传 label='选择文件...', help_text='大100M' )
4.views.py
from django.shortcuts import render from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect from django.http import FileResponse from django.template import RequestContext from django.urls import reverse from django.utils.http import urlquote from .models import FileInfo from .forms import UploadForm import os # 上传文件 def upload(request): # Handle file upload if request.method == 'POST': form = UploadForm(request.POST, request.FILES) if form.is_valid(): files = request.FILES.getlist('file') for f in files: file_info = FileInfo(file_name=f.name, file_size=1 if 0 < f.size < 1024 else f.size / 1024, file_path=os.path.join('D:\\upload', f.name)) file_info.save() # 上传 destination = open(os.path.join("D:\\upload", f.name), 'wb+') for chunk in f.chunks(): destination.write(chunk) destination.close() # 返回上传页 return HttpResponseRedirect('/uploader/list') else: form = UploadForm() # A empty, unbound form return render(request, 'uploader/upload.html', {'form': form}) # 文件列表 def list(request): file_infos = FileInfo.objects.all() return render(request, 'uploader/list.html', {'file_infos': file_infos}) # 下载文件 def download(request, id): file_info = FileInfo.objects.get(id=id) print('下载的文件名:' + file_info.file_name) file = open(file_info.file_path, 'rb') response = FileResponse(file) response['Content-Disposition'] = 'attachment;filename="%s"' % urlquote(file_info.file_name) return response # 删除文件 def delete(request, id): file_info = FileInfo.objects.get(id=id) file_info.delete() file_infos = FileInfo.objects.all() return HttpResponseRedirect('/uploader/list')
关于使用Django怎么实现文件上传下载功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。