python实现FTP文件上传
注意:代码环境为服务端 客户端都在本地上,且都在同一个目录下进行编写的,大家可以根据自己的需要进行修改
大体思路:首先将文件的基本信息如文件名称,文件大小,文件的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文件上传相关推荐
- python连接ftp并上传、下载文件
# -*- coding:utf-8 -*- """ Created on 2019年12月11日 :封装FTP文件上传与下载函数 @author: dch " ...
- php vsftpd文件上传类,php ftp文件上传函数(基础版)
php ftp文件上传函数(基础版) 复制代码 代码如下: // 定义变量 $local_file = 'local.zip'; $server_file = 'server.zip'; // 连接F ...
- java ftp 下载慢_Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题
废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String usern ...
- java上传ftp_java实现FTP文件上传与文件下载
本文实例为大家分享了两种java实现FTP文件上传下载的方式,供大家参考,具体内容如下 第一种方式: package com.cloudpower.util; import java.io.File; ...
- 基于腾讯COS对象存储SDK使用Python编写的文件上传工具第二版
更多技术文章请访问我的个人博客http://www.rain1024.com NR-TCloud 1.1,更新于2017-02-08 更新说明: 第一版上传时需要将upload.pyc复制到要上传对象 ...
- 基于OkHttp 、Retrofit 、Volley 、RxJava、Novate多种网络框架整合的快速项目开发框架,一行代码实现Ftp文件上传、文件下载、文件删除和进度监听的工具类的使用
基于OkHttp .Retrofit .Volley .RxJava.Novate多种网络框架整合的快速项目开发框架,Ftp文件上传.文件下载的工具类的使用. 依赖于Ftp的jar包,对上传.下载.删 ...
- php 上传图片 ftp,ftp文件上传_php ftp文件上传
摘要 腾兴网为您分享:php ftp文件上传,有道英语,央视影音,学习计时,微光等软件知识,以及天天小视频,24小时时间计算器,oki5500f打印机驱动,中天期货,差旅天下,filegee企业文件同 ...
- C++:FTP文件上传下载(附完整源码)
C++:FTP文件上传下载 FTP文件下载 FTP文件上传 FTP文件下载 #include #include #include #pragma comment(lib, "WinInet. ...
- FTP文件上传工具类
import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.a ...
- 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录
将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...
最新文章
- J2EE项目移植问题一
- Delphi下使用OpenOffice+JodConverter+SWFtools进行文件转换
- ASP.NET 3.5中的一个超简单的Ajax实验
- codeproject上的一款分页控件
- linux替换某个文件夹下所有文件,Linux 批量查找并替换文件夹下所有文件的内容...
- 基于阿里云HiTSDB搭建工业物联网平台实践
- HDU 4432 Sum of divisors 2012 Asia Tianjin Regional Contest
- java 使用 poi 操纵 excel2003 经验总结
- 转: Nginx proxy讲解精华文章集
- 判断IP是否为搜索引擎蜘蛛或爬虫
- TIFF文件结构详解
- 软件设计师中级-笔记
- 异步十二进制加法计数器(统一使用上升沿触发的D触发器)
- foxmail邮箱pop3服务器,Foxmail怎么设置POP3邮箱
- 信息系统项目管理师-软考-B站自学
- Windows自带照片查看器恢复办法
- http协议与tcp协议区别
- excel 行列转换
- REST Assured 22 - JSON
- Spring Bean 配置相关的注意事项
热门文章
- SSH学习之四 OpenSSH安全
- docker安装ftp
- 跨平台最好用的五笔输入法 Rime(鼠须管、小狼毫、中州韵) macOS Linux Windows 安装教程
- php+美图秀秀,美图秀秀web开放平台--PHP流式上传和表单上传示例分享
- Java笔试题黑棋围白棋_2016恒生电子笔试题_软件测试笔试题100精讲_恒生电子笔试题目(2)...
- USGS网站中STRM DEM数据批量下载
- Java_银行排队叫号系统
- 项目管理概论【项目管理基础-第一章 项目与项目管理】
- win10系统HP打印机驱动程序无法使用
- Cplex教程(C++)