首页 > 其他分享 >【Django】通用分块上传

【Django】通用分块上传

时间:2024-01-18 11:14:35浏览次数:27  
标签:分块 os chunk Django file path 上传 dir

通用分块上传文件

import os

# 通用路径分块上传
def piecemeal_public_load(path, original_md5_hash, chunk_index, upload_file, chunk_total, file_Name):
    """
        path: 存放路径(media/后面跟的路径)
        original_md5_hash:  临时文件夹名称
        chunk_index:  分块索引
        upload_file:  二进制文件对象
        chunk_total:  分块总数量
        file_Name:    合并后的文件名称
        
        :return 布尔值,相对路径
    """
    # 创建文件夹 
    joined_path = os.path.join(settings.MEDIA_ROOT, path)
    output_dir = os.path.normpath(joined_path)
    os.makedirs(output_dir, exist_ok=True)
    
    # 创建模块临时目录
    temp_dir = os.path.join(settings.MEDIA_ROOT, 'temp', original_md5_hash)
    os.makedirs(temp_dir, exist_ok=True)
    
    # 保存文件分块到临时目录
    chunk_path = os.path.join(temp_dir, f'{chunk_index}_{upload_file.name}')
    with open(chunk_path, 'wb+') as destination:
        for chunk in upload_file.chunks():
            destination.write(chunk)
            
    # 核对分块数量
    received_num_chunks = len(os.listdir(temp_dir))
    if received_num_chunks == chunk_total:
        # 按照索引顺序拼接分块文件
        from urllib.parse import unquote
        output_path = os.path.join(output_dir, unquote(file_Name))
        with open(output_path, 'wb+') as output_file:
            for i in range(chunk_total):
                chunk_filename = f'{i + 1}_{upload_file.name}'
                chunk_path = os.path.join(temp_dir, chunk_filename)
                with open(chunk_path, 'rb') as chunk_file:
                    output_file.write(chunk_file.read())
                # 删除已合并的分块文件
                os.remove(chunk_path)
        # 获取相对路径
        relative_path = "media/" + os.path.relpath(output_dir, settings.MEDIA_ROOT)
        return True, os.path.normpath(relative_path)
    else:
        return False,"分块不完整"

标签:分块,os,chunk,Django,file,path,上传,dir
From: https://www.cnblogs.com/wanghong1994/p/17972070

相关文章

  • 如何在博客园上传MD格式文件
    如何在博客园上传MD格式文件第一步使用cmd安装pyyaml库pip3installpyyaml#我已经安装过了,显示不一样第二步下载解压pycnbolghttps://github.com/dongfanger/pycnblog第三步打开文件夹中config.yaml文件修改配置blog_url:#这个就是你的博客网址blog_id:""博客......
  • MobaXterm上传下载文件、文件夹到服务器上的操作方法
    首先通过SSH与服务器建立连接,可参考https://www.cnblogs.com/mercury-cheng/p/17969225。1、上传下载文件可以在命令输入窗口,无需输入命令,按ctrl单击的同时鼠标右键出现以下左图,选择receivefileusingZ-modem或者sendfile usingZ-modem来上传或者下载文件。也可以通过mob......
  • Django如何开发网页
    Django作为一款广泛应用于Web开发的框架,其在实际项目中的表现至关重要。掌握Django的开发技巧和最佳实践,不仅可以提高开发者的编程水平,还可以为企业节省开发成本,提高项目竞争力。此外,Django框架在我国的应用也日益广泛,对我国互联网产业的发展产生了积极推动作用。因此,对Django进行......
  • LayUI多文件上传,支持历史上传预览
    记录一次项目开发中,LayUI多个图片进行优化,需要支持多个图片上传、可删除某一个图片、支持加载上次上次图片。页面代码:<divclass="layui-upload"><buttontype="button"class="layui-btnlayui-btn-normal"id="ID-upload-demo-files">选择多文件&l......
  • 文件上传超出了tomcat的限制大小:org.apache.tomcat.util.http.fileupload.impl.FileSi
    报错的原因springBoot项目自带的tomcat对上传的文件大小有默认的限制,SpringBoot官方文档中展示:每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。解决方法SpringBoot2.0版本在【application】配置文件中加入如下代码:#maxFileSize单个数据大小spring.servlet......
  • Gin单文件上传以及多文件上传
    Gin单文件上传以及多文件上传1单文件上传funcmain(){router:=gin.Default()//为multipartforms设置较低的内存限制(默认是32MiB)//router.MaxMultipartMemory=8<<20//8MiBrouter.POST("/upload",func(c*gin.Context){file......
  • Gin 文件上传 按照日期存储
    Gin文件上传按照日期存储1实现步骤/* 1.获取上传的文件 2.获取后缀名判断类型是否正确.jpg.png.gif.jpeg 3.创建图片保存目录static/upload/20240101 4.生成文件名称和文件保存的目录 5.保存*/2代码//获取当前的日期funcGetDay()string{ template:="......
  • Markdown文件上传博客园
    Markdown文件上传博客园冲浪发现了能直接上传markdown文件的脚本,不用自己慢慢复制了,非常好用~所需工具:Typora需要破解版,网上很多。pythonpycnblog(实现md文件上传的脚本):https://github.com/dongfanger/pycnblogTypora的设置:​ 上传笔记肯定会有图片,需要对Typora的相关......
  • OSS 上传和删除图片 Python SDK
    最近在搞一些全栈的小项目,涉及到图片的上传,删改等操作,想着还是用这个云服务器来整一波,阿里云的OSS对象存储,40G1年9块钱,值得拥有!前提购买了阿里云OSS服务创建了AccessKey和AccessKeySecret创建了一个Bucket,虽然也可以用代码,但没有必要安装了Py......
  • Django 使用swagger自定义自动生成类
    完整代码:https://gitee.com/mom925/django-system之前写的Django配置swagger(https://www.cnblogs.com/moon3496694/p/17657283.html)其实更多还是自己手动的写代码去书写接口文档,我希望它能更加的自动化生成出接口文档,所以我需要自己重写一些函数。安装所需的包,注册app,注册路由参考......