socket版本文件上传

  upload_server.py

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 import socket
 4 import os
 5 import sys
 6
 7
 8
 9 BASE_DIR = os.path.dirname(__file__)
10
11 sk=socket.socket()
12 sk.bind((‘127.0.0.1‘,8989))
13 sk.listen(5)
14
15
16
17 while True:
18     try:
19         conn,address = sk.accept()
20         print(conn,address)
21         command, filename, file_size = str(conn.recv(1024),encoding=‘utf-8‘).split(‘|‘)
22         print(command, filename, file_size)
23         file_path = os.path.join(BASE_DIR,‘upload‘,filename)
24
25
26         if os.path.isfile(file_path):
27             file_size_exsit = os.stat(file_path).st_size
28             print(file_size_exsit)
29             conn.sendall(bytes(str(file_size_exsit), encoding=‘utf-8‘))
30
31             transfered_file_size = file_size_exsit
32
33             with open(file_path, ‘a+b‘) as file_write:
34                 file_write.seek(file_size_exsit)
35                 while True:
36                     if transfered_file_size == int(file_size):
37                         break
38
39                     data = conn.recv(1024)
40                     if len(data) == 0:
41                         break
42                     file_write.write(data)
43                     transfered_file_size += len(data)
44
45         else:
46             transfered_file_size = 0
47             conn.sendall(bytes(‘okay‘,encoding=‘utf-8‘))
48             with open(file_path, ‘w+b‘) as file_write:
49                 print(file_size, type(file_size))
50                 while True:
51                     if transfered_file_size == int(file_size):
52                         break
53
54                     data = conn.recv(1024)
55                     if len(data) == 0:
56                         break
57                     if str(data,encoding=‘utf-8‘)==‘0‘:
58                         break
59                     file_write.write(data)
60                     transfered_file_size += len(data)
61     except Exception as e:
62         print(e)

upload.py

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3
 4 import socket
 5 import os
 6 import sys
 7 import time
 8
 9 BASE_DIR =  os.path.dirname(__file__)
10
11
12
13
14
15
16 while True:
17     obj = socket.socket()
18     obj.connect((‘127.0.0.1‘, 8989))
19     while True:
20         inp = input("请输入操作以及文件名(以空格隔开):")
21         if inp == "":
22             print("不能为空")
23             continue
24         else:
25             break
26     command, filename = inp.strip().split(" ")
27     # print(command,filename)
28     file_path = os.path.join(BASE_DIR,filename)
29     file_size = os.stat(file_path).st_size
30     info = "%s|%s|%s" %(command,filename,file_size)
31
32     obj.sendall(bytes(info,encoding=‘utf-8‘))
33     file_seek = str(obj.recv(1024),encoding=‘utf-8‘)
34     print(file_seek,type(file_seek))
35
36     if file_seek == ‘okay‘:
37         send_file_size = 0
38         with open(file_path, ‘rb‘) as file:
39             for line in file.readlines():
40                 obj.sendall(line)
41                 send_file_size += len(line)
42                 file_percent = (send_file_size / file_size) * 100
43                 bar = "\r"+"|" + ">"*int(file_percent) +" "*int((100-file_percent)) +"|%-5.1f"%(file_percent) +"%"
44                 sys.stdout.write(bar)
45                 sys.stdout.flush()
46                 time.sleep(0.001)
47     else:
48         file_seek = int(file_seek)
49         print(file_seek,type(file_seek))
50         print(file_size,type(file_size))
51         if file_seek < file_size:
52             print("此文件已经存在,将断点续传...")
53         else:
54             print("此文件已经存在,请勿重复上传...")
55
56         send_file_size = file_seek
57         with open(file_path, ‘rb‘) as file:
58             file.seek(send_file_size)
59             for line in file.readlines():
60                 obj.sendall(line)
61                 send_file_size += len(line)
62                 file_percent = (send_file_size / file_size) * 100
63                 bar = "\r" + "|" + ">" * int(file_percent) + " " * int((100 - file_percent)) + "|%-5.1f" % (
64                 file_percent) + "%"
65                 sys.stdout.write(bar)
66                 sys.stdout.flush()
67                 time.sleep(0.001)
68     print("\n")
69     obj.close()
时间: 2024-10-15 22:32:42

socket版本文件上传的相关文章

3Python全栈之路系列之基于socket实现文件上传

Python全栈之路系列之基于socket实现文件上传 发布时间:2017年3月16日 00:04 浏览(106) 评论(0) 分类:Python 前言 此处没有前言 粘包 在实现发送文件功能之前我们先来理解下粘包的问题,下面有两张图,我觉得很清晰的就可以理解到了. 正常情况下发送文件 第一步: 客户端把获取到的文件总大小(size=65426)先放到缓冲区,然后发送给服务端 第二步: 此时客户端接收到的文件总大小就是65426 粘包的问题下发送文件 第一步: 客户端把获取到的文件总大小(siz

Socket大文件上传

1 public sealed class SocketData 2 { 3 private SocketData() 4 { 5 } 6 7 public static SendFileMode SendFile(Socket socket, string fileName, int maxBufferLength) 8 { 9 SendFileMode flag = SendFileMode.Success; 10 try 11 { 12 using (Stream fs = new Fil

express4.0以上版本文件上传

发现很多node的书介绍express文件上传都是基于3.*版本的, 现在express的版本都是4.+的,很多以前的代码跑不动了 所以自己折腾了个小demo 实现了限制上传文件种类和大小 例子是基于formidable模块的 github地址为https://github.com/felixge/node-formidable var express = require('express'); var formidable = require('formidable'); var router

Python网络编程之基于socket实现文件上传

粘包 在实现发送文件功能之前我们先来理解下粘包的问题,下面有两张图,我觉得很清晰的就可以理解到了. 正常情况下发送文件 第一步: 客户端把获取到的文件总大小(size=65426)先放到缓冲区,然后发送给服务端 第二步: 此时客户端接收到的文件总大小就是65426 粘包的问题下发送文件 第一步: 客户端把获取到的文件总大小(size=65426)先放到缓冲区 第二步: 此时可能由于文件读取太快,导致缓存区的内容还没有发送到服务端,客户端就把读取到的文件内容(hello)也放到缓存区: 第三步: 

HTML5 + AJAX ( jQuery版本 ) 文件上传带进度条

页面技术:HTML5 + AJAX ( jQuery) 后台技术:Servlet 3.0 jQuery版本:1.9.1 后台Servlet代码这里就省略了,使用的是 AJAX请求遭遇未登录和Session失效的解决方案 这篇文章里面的后台Servlet.所以这里只看前台的JS代码. 首先HTML5用AJAX提交数据先要学习一个HTML5新增加的对象:FormData  FormData 对象可以使用append 方法进行 key - value的数据添加,与以前我们常用的json不同的就是可以异

python socket 进行文件上传下载

!/bin/python #coding:utf-8import SocketServerimport osimport datetimeimport MySQLdbclass mysql:def init(self):self.connect = MySQLdb.connect(host = '192.168.221.203',user = 'hall',passwd = '520157',port = 3306,db = 'info',charset = 'utf8')def mysql_c

java中TCP两个例子大写服务器和文件上传

大写服务器的实例: package com.core.net; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; class

使用html5实现文件上传进度条

html <div id="file"> <input type="file" name="ver" id="ver"/> <font color="red">*(apk,ipa目前为自动重命名)</font><br /> <div class="progress"><span class="bgpr

struts 多文件上传 xml 版本

[本文简介] 本文将介绍 以配置 struts.xml  的方式 实现 多文件上传的功能. [文件夹结构] [struts.xml] 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://st