server.py文件内容如下

import socket
import os
import json
import hashlibsk = socket.socket()
sk.bind(('127.0.0.1', 8000))
sk.listen(5)
conn, addr = sk.accept()while True:# 接受客户端发送的数据,看是否存在存在md5文件名称recive_msg = json.loads(conn.recv(1024).decode('utf8'))# md5文件名md5_file_name = recive_msg['file_md5_value']# 文件大小file_total_size = recive_msg['file_total_size']# 原始文件大小origin_file_name = recive_msg['origin_file_name']# 判断文件是否存在,存在的话续传.否则从0开始传is_exists = os.path.exists('./upload/' + md5_file_name)if not is_exists:# 从0开始上传conn.sendall(json.dumps({'code': 1001, 'msg': '从0开始上传'}).encode('utf8'))# 接受从客户端传来的数据recive_size = 0f = open('./upload/' + md5_file_name, 'wb')while recive_size < file_total_size:data = conn.recv(1024)f.write(data)# 主动将内存中的数据刷到到文件中去f.flush()recive_size += len(data)f.close()# 上传完毕后,修改文件的文件名为原始文件名if os.path.getsize('./upload/' + md5_file_name) == file_total_size:os.rename('./upload/' + md5_file_name, './upload/' + origin_file_name)else:# 断点续传, (先把已经接收到的文件的大小发送给客户端)# 已接收到的大小has_recive_size = os.path.getsize('./upload/' + md5_file_name)conn.sendall(json.dumps({'code': 1002, 'msg': '断点续传', 'has_recive_size': has_recive_size}).encode('utf8'))recive_size = has_recive_sizef = open('./upload/' + md5_file_name, 'ab')while recive_size < file_total_size:data = conn.recv(1024)f.write(data)# 主动将内存中的数据刷到到文件中去f.flush()recive_size += len(data)f.close()# 上传完毕后,修改文件的文件名为原始文件名if os.path.getsize('./upload/' + md5_file_name) == file_total_size:os.rename('./upload/' + md5_file_name, './upload/' + origin_file_name)break
conn.close()
sk.close()

client.py文件内容如下:

import socket
import os
import hashlib
import jsonsk = socket.socket()
sk.connect(('127.0.0.1', 8000))md5 = hashlib.md5()
# 上传文件前先检查文件的md5值,如果服务端存在就续传,否则从0开始上传
# 临时文件的名称是md5值,上传成功后修改文件名称为真实文件名称
while True:file_name = input('请输入需要上传的文件的名称:').strip()# 获取文件的md5值with open(file_name, 'rb') as f:for line in f:md5.update(line)md5_value = md5.hexdigest()# 获取文件的总大小total_size = os.path.getsize(file_name)# 组合发送的数据dic = {'file_md5_value': md5_value, 'file_total_size': total_size, 'origin_file_name': file_name}dic_str_bytes = json.dumps(dic).encode('utf8')# 发送数据sk.sendall(dic_str_bytes)# 判断code值,是否从0开始上传has_code_msg = json.loads(sk.recv(1024).decode('utf8'))code = has_code_msg['code']if code == 1001:# 从0开始上传try:f = open(file_name, 'rb')upload_size = 0while upload_size < total_size:data = f.read(1024)sk.sendall(data)upload_size += len(data)# break # 测试断点finally:f.close()else:# 断点续传# 先获取已经上传过的大小has_send_size = has_code_msg['has_recive_size']try:f = open(file_name, 'rb')upload_size = has_send_sizef.seek(has_send_size)while upload_size < total_size:data = f.read(1024)sk.sendall(data)upload_size += len(data)finally:f.close()

目录结构如下:

python 文件上传之---断点续传相关推荐

  1. vue 文件及描述信息一起上传_用Vue实现一个大文件上传和断点续传

    前言 这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在面试的时候确实被问到了这个问题,而且是一道在线 coding ...

  2. java面试 上传文件_字节跳动面试官,我也实现了大文件上传和断点续传

    前言 前几天看到一个文章,感触很深 作者从0实现了大文件的切片上传,断点续传,秒传,暂停等功能,深入浅出的把这个面试题进行了全面的剖析 彩虹屁不多吹,我决定蹭蹭热点,录录视频,把作者完整写代码的过程加 ...

  3. esp8266 刷 MicroPython固件,并使用MicroPython File Uploader python文件上传工具上传python文件

    1.使用模块esp8266 2.进入固件官网:https://micropython.org/download/esp8266/ 3.将下载的esp8266-20220618-v1.19.1.bin放 ...

  4. nodejs文件服务器断点续传,基于Nodejs的大文件上传之断点续传

    接着<扒一扒Nodejs formidable的onPart>和<也说文件上传之兼容IE789的进度条---丢掉flash>:前面已完成兼容IE789的大文件上传:无flash ...

  5. fastdfs redis java,大文件上传_断点续传_文件分片传输_fastdfs_前后端一站式解决方案...

    大文件上传,断点续传,秒传,fastdfs 项目介绍 实现h5与fastdfs之间的断点续传,大文件上传,秒传 软件架构 软件架构说明 webuploader+springboot+redis+fas ...

  6. python 文件上传下载,python实现上传下载文件功能

    最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...

  7. 基于js管理大文件上传以及断点续传

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 前言 前端小伙伴们平常在开发过程中文件上传是经常遇到的一个问题,也许你能够实现相关的功能,但 ...

  8. 超大文件上传和断点续传的实现

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  9. VC++ FTP文件上传(断点续传)

    #include <WinInet.h> #pragma comment(lib, "WinInet.lib") HINTERNET hInternet, hConne ...

最新文章

  1. __cdecl __fastcall与__stdcall
  2. 【PC工具】建议收藏!一个有N多日常生活学习办公小工具的神奇网站,推荐在线工具网站...
  3. java监听变量的变化_[Java学习小记]使用PropertyChangeSupport来监听变量的变化
  4. abap 调用外部web service 使用小结
  5. matlab有意思程序,matlab有意思的小程序
  6. ubuntu彻底卸载apache2、mysql、php(各版本通用)
  7. android 特效绘图,Android绘图机制与处理技巧——Android图像处理之图形特效处理...
  8. java并发编程实战:第十四章----构建自定义的同步工具
  9. VSCode 汉化、设置为 中文语言显示 、中文界面
  10. Jmeter(三)_配置元件
  11. FIREDAC连接MSSQL 2000报不能支持连接MSSQL2000及更低版本的解决办法
  12. js之数据类型的比较
  13. scrapy Request
  14. IntelliJ IDEA 2019.3 正式发布,给我们带来哪些新特性?| CSDN 博文精选
  15. 稀疏矩阵的加,减,乘,转置
  16. python版本可执行可嵌入_Python程序打包成exe可执行文件的方法探究
  17. 框架原理第三讲,RTTCreate,运行时类型创建.(以MFC框架讲解)
  18. 《视觉SLAM十四讲》笔记摘抄
  19. python 什么意思_Python中冒号等于(:=)是什么意思?
  20. 李维看 .net 和 DELPHI 6 (含李维照片) (转)

热门文章

  1. 销售人员如何抓住客户?
  2. python中ljust的意思_python中ljust什么意思
  3. 灰色预测之GM(1,1),教你快速上手数学建模!
  4. RtspLiveServer一款支持rtsp协议流媒体服务器软件
  5. NuSences 数据集解析以及 nuScenes devkit 的使用
  6. ArcGIS中利用DEM数据生成地形图既视感的等高线;利用掩膜进行等高线注记;DEM的可视化表达总结
  7. 会计未来十年发展趋势_CFO眼中未来十年财务变化【值得收藏】
  8. kaggle竞赛:泰坦尼克幸存者预测
  9. SAP:常用的T-code
  10. 什么是PDF(便携式文档格式)文件以及如何打开PDF?