博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大文件分组上传以及进度条
阅读量:4101 次
发布时间:2019-05-25

本文共 2717 字,大约阅读时间需要 9 分钟。

(一)环境与页面预览

python3.6

django2.2.4

WebUploader文件上传组件:

WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件

预览:

(二)前端index.html代码部分(二选一)

1、前端选择文件后自动上传的完整代码,不用点击开始上传

    
文件上传
选择文件

2、前端选择文件后需要点击上传的完整代码

    
Title
选择文件

(三)后台路由

from django.conf.urls import urlfrom django.contrib import adminfrom django.urls.conf import pathfrom up_test.views import *urlpatterns = [    url(r'^admin/', admin.site.urls),    path('',index),    path('upload', file_upload), # 文件分片上传    path('file_merge', file_merge)  # 文件重组]

(四)后台views

import osfrom django.core.files.base import ContentFilefrom django.core.files.storage import default_storagefrom django.shortcuts import render, render_to_response# Create your views here.from django.views.decorators.csrf import csrf_exemptdef index(request):    return render(request,'index.html')@csrf_exemptdef file_upload(request):    if request.method == 'POST':        upload_file = request.FILES.get('file')        task = request.POST.get('task_id')  # 获取文件唯一标识符        chunk = request.POST.get('chunk', 0)  # 获取该分片在所有分片中的序号        filename = '%s%s' % (task, chunk)  # 构成该分片唯一标识符        print("filename=", filename)        default_storage.save('./upload/%s' % filename, ContentFile(upload_file.read()))  # 保存分片到本地    return render_to_response('index.html', locals())@csrf_exemptdef file_merge(request):    print(request.GET)    task = request.GET.get('task_id')    ext = request.GET.get('filename', '')    upload_type = request.GET.get('type')    if len(ext) == 0 and upload_type:        ext = upload_type.split('/')[1]    ext = '' if len(ext) == 0 else '_%s' % ext  # 构建文件后缀名    chunk = 0    with open('./upload/%s%s' % (task, ext), 'wb') as target_file:  # 创建新文件        while True:            try:                filename = './upload/%s%d' % (task, chunk)                source_file = open(filename, 'rb')  # 按序打开每个分片                target_file.write(source_file.read())  # 读取分片内容写入新文件                source_file.close()            except IOError:                break            chunk += 1            os.remove(filename)  # 删除该分片,节约空间    # 分片重组后文件重命名    path = os.path.dirname(os.path.dirname(__file__))    old_name = task+ext    ext = ext.replace('_','')    new_name = ''    print(path + '\\upload\\' + old_name)    print(path + '\\upload\\' + new_name)    os.rename(path + '\\upload\\' + old_name, path + '\\upload\\' + new_name)    return render_to_response('index.html', locals())

 

转载地址:http://lwwsi.baihongyu.com/

你可能感兴趣的文章
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>
servlet&jsp 的使用以及jsp的历史遗留用法
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
2019年百度校招面试题《Java开发工程师》
查看>>
Java 8 中的 Streams API 详解
查看>>
mysql基础优化
查看>>
MySQL约束笔记
查看>>
MySQL基础
查看>>
MySQL多表&事务基础笔记
查看>>
JDBC连接池&JDBCTemplate基础笔记
查看>>
oracle错误码及解决方法
查看>>
Oracle协议适配器错误解决办法
查看>>
张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质
查看>>
小球反弹(一小球从100米自由下落)
查看>>