注意:代码环境为服务端 客户端都在本地上,且都在同一个目录下进行编写的,大家可以根据自己的需要进行修改

大体思路:首先将文件的基本信息如文件名称,文件大小,文件的MD5值,封装一下,让后序列化,发送到服务端,服务端对MD5进行检查是否存在自己当前的目录,如果没有存在就行重传,如果已经存在就进行断点续传,中间使用MD5作为文件名进行临时存储文件的内容,这样可以避免同名不同内容的文件的上传,然后等到传输完毕,则将文件名改为自己需要的文件名

客户端代码

import socket
import os
import hashlib
import json
#创建socket对象
up_client = socket.socket()
#连接服务端
up_client.connect(("127.0.0.1",8001))
#求文件的md5值
def file_md5(file_path):obj = hashlib.md5()with open(file_path,mode="rb") as f:for line in f:obj.update(line)return obj.hexdigest()#文件信息
#文件路径
#这里上传的是自己电脑上的文件路径,也可以对代码进行修改,将路径修改为需要输入的路径值,这样就可以进行上传,同时也要注意在服务端也进行修改
file_path = "01.txt"
#获取文件大小
file_size = os.stat(file_path).st_size
file_md5 = file_md5(file_path)
file_name = os.path.basename(file_path)
#自定义协议
file_infor = {"file_name":file_name,"file_size":file_size,"file_md5":file_md5}
up_client.sendall(json.dumps(file_infor).encode("utf-8"))
serve_msg = up_client.recv(1024).decode("utf-8")
if serve_msg=="1002":print("开始发送")with open(file_path,mode="rb") as f:for line in f:up_client.sendall(line)print("发送完毕")
else:exits_size = up_client.recv(1024).decode("utf-8")print("开始发送")with open(file_path,mode="rb") as f:f.seek(exits_size)for line in f:up_client.sendall(line)print("发送完毕")
up_client.close()

服务端代码

import socketserver
import os
import json
import shutil
class UPserver(socketserver.BaseRequestHandler):def handle(self):ret = self.request.recv(1024)file_msg = json.loads(ret)file_name = file_msg["file_name"]file_size = file_msg["file_size"]file_md5 = file_msg["file_md5"]# 判断上传的文件是否已经存在服务端#这里的路径修改自己修改就行,这里我用的是我自己电脑上的路径,大家根据自己的需要修改就行file_exit = os.path.exists("/".join(["PythonStudy", file_md5]))#1001表示存在,1002表示不存在file_code = {"exits":"1001","no_exits":"1002"}# 如果没有存在服务端则进行上传if not file_exit:recv_size = 0total_size = file_sizeself.request.sendall(file_code["no_exits"].encode("utf-8"))print("开始接受")f = open(file_md5,mode="wb")while recv_size<total_size:data = self.request.recv(1024)f.write(data)f.flush()recv_size+=len(data)f.close()shutil.move(file_md5,file_name+"2")print("接受完毕")#如果存在服务端则进行断点续传else:#这里的路径自己进行修改就行,这里我用的是我自己电脑上的路径,大家根据自己的需要修改就行exit_size = os.stat("/".join("PythonStudy",file_md5))total_size = file_sizeself.request.sendall(exit_size.encode("utf-8"))f = open(file_md5, mode="ab")while exit_size<total_size:data = self.request.recv(1024)f.write(data)f.flush()exit_size+=len(data)f.close()shutil.move(file_md5,file_name+"2")
serve = socketserver.ThreadingTCPServer(("127.0.0.1",8001),UPserver)
serve.serve_forever()

python实现FTP文件上传相关推荐

  1. python连接ftp并上传、下载文件

    # -*- coding:utf-8 -*- """ Created on 2019年12月11日 :封装FTP文件上传与下载函数 @author: dch " ...

  2. php vsftpd文件上传类,php ftp文件上传函数(基础版)

    php ftp文件上传函数(基础版) 复制代码 代码如下: // 定义变量 $local_file = 'local.zip'; $server_file = 'server.zip'; // 连接F ...

  3. java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题

    废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String usern ...

  4. java上传ftp_java实现FTP文件上传与文件下载

    本文实例为大家分享了两种java实现FTP文件上传下载的方式,供大家参考,具体内容如下 第一种方式: package com.cloudpower.util; import java.io.File; ...

  5. 基于腾讯COS对象存储SDK使用Python编写的文件上传工具第二版

    更多技术文章请访问我的个人博客http://www.rain1024.com NR-TCloud 1.1,更新于2017-02-08 更新说明: 第一版上传时需要将upload.pyc复制到要上传对象 ...

  6. 基于OkHttp 、Retrofit 、Volley 、RxJava、Novate多种网络框架整合的快速项目开发框架,一行代码实现Ftp文件上传、文件下载、文件删除和进度监听的工具类的使用

    基于OkHttp .Retrofit .Volley .RxJava.Novate多种网络框架整合的快速项目开发框架,Ftp文件上传.文件下载的工具类的使用. 依赖于Ftp的jar包,对上传.下载.删 ...

  7. php 上传图片 ftp,ftp文件上传_php ftp文件上传

    摘要 腾兴网为您分享:php ftp文件上传,有道英语,央视影音,学习计时,微光等软件知识,以及天天小视频,24小时时间计算器,oki5500f打印机驱动,中天期货,差旅天下,filegee企业文件同 ...

  8. C++:FTP文件上传下载(附完整源码)

    C++:FTP文件上传下载 FTP文件下载 FTP文件上传 FTP文件下载 #include #include #include #pragma comment(lib, "WinInet. ...

  9. FTP文件上传工具类

    import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.a ...

  10. 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录

    将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...

最新文章

  1. J2EE项目移植问题一
  2. Delphi下使用OpenOffice+JodConverter+SWFtools进行文件转换
  3. ASP.NET 3.5中的一个超简单的Ajax实验
  4. codeproject上的一款分页控件
  5. linux替换某个文件夹下所有文件,Linux 批量查找并替换文件夹下所有文件的内容...
  6. 基于阿里云HiTSDB搭建工业物联网平台实践
  7. HDU 4432 Sum of divisors 2012 Asia Tianjin Regional Contest
  8. java 使用 poi 操纵 excel2003 经验总结
  9. 转: Nginx proxy讲解精华文章集
  10. 判断IP是否为搜索引擎蜘蛛或爬虫
  11. TIFF文件结构详解
  12. 软件设计师中级-笔记
  13. 异步十二进制加法计数器(统一使用上升沿触发的D触发器)
  14. foxmail邮箱pop3服务器,Foxmail怎么设置POP3邮箱
  15. 信息系统项目管理师-软考-B站自学
  16. Windows自带照片查看器恢复办法
  17. http协议与tcp协议区别
  18. excel 行列转换
  19. REST Assured 22 - JSON
  20. Spring Bean 配置相关的注意事项

热门文章

  1. SSH学习之四 OpenSSH安全
  2. docker安装ftp
  3. 跨平台最好用的五笔输入法 Rime(鼠须管、小狼毫、中州韵) macOS Linux Windows 安装教程
  4. php+美图秀秀,美图秀秀web开放平台--PHP流式上传和表单上传示例分享
  5. Java笔试题黑棋围白棋_2016恒生电子笔试题_软件测试笔试题100精讲_恒生电子笔试题目(2)...
  6. USGS网站中STRM DEM数据批量下载
  7. Java_银行排队叫号系统
  8. 项目管理概论【项目管理基础-第一章 项目与项目管理】
  9. win10系统HP打印机驱动程序无法使用
  10. Cplex教程(C++)