1.使用socket实现文件上传

server.py

  1. #!/usr/bin/env python
  2. # _*_ coding:UTF-8 _*_
  3.  
  4. import os
  5. import SocketServer
  6.  
  7. class MyServer(SocketServer.BaseRequestHandler):
  8. def handle(self):
  9. base_path = "/Users/liudaoqiang/"
  10. conn = self.request
  11. print "connected"
  12.  
  13. while True:
  14. pre_data = conn.recv(1024)
  15. cmd, file_name, file_size = pre_data.split("|")
  16.  
  17. recv_size = 0
  18. file_dir = os.path.join(base_path, file_name)
  19. f = file(file_dir, "wb")
  20.  
  21. Flag = True
  22. while Flag:
  23. if int(file_size) > recv_size:
  24. data = conn.recv(1024)
  25. recv_size += len(data)
  26. else:
  27. recv_size = 0
  28. Flag = False
  29. f.write(data)
  30. print "upload success"
  31. f.close()
  32.  
  33. instance = SocketServer.ThreadingTCPServer(("127.0.0.1", 9999), MyServer)
  34. instance.serve_forever()

client.py

  1. # !/usr/bin/env python
  2. # _*_ coding:UTF-8 _*_
  3.  
  4. import socket
  5. import os
  6.  
  7. if __name__ == "__main__":
  8.  
  9. client = socket.socket()
  10. ip_port = ("127.0.0.1", 9999)
  11. client.connect(ip_port)
  12.  
  13. while True:
  14. input = raw_input(">>>>")
  15. cmd, path = input.split("|")
  16. file_name = os.path.basename(path)
  17. file_size = os.stat(path).st_size
  18. client.send(cmd + "|" + file_name + "|" + str(file_size))
  19.  
  20. send_size = 0
  21. f = file(path, "rb")
  22. Flag = True
  23.  
  24. while Flag:
  25. if send_size + 1024 > file_size:
  26. data = f.read((file_size - send_size))
  27. Flag = False
  28. else:
  29. data = f.read(1024)
  30. send_size += 1024
  31.  
  32. f.close()
  33. client.close()

老男孩 python学习自修第二十二天【文件上传与下载】的更多相关文章

  1. (转载)JavaWeb学习总结(五十)——文件上传和下载

    源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...

  2. JavaWeb学习总结(五十)——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  3. JavaWeb学习 (二十八)————文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  4. Struts2学习(六)———— 文件上传和下载

    一.单文件上传 在没学struts2之前,我们要写文件上传,非常麻烦,需要手动一步步去获取表单中的各种属性,然后在进行相应的处理,而在struts2中就不需要了,因为有一个fileUpload拦截器帮 ...

  5. 学习Struts--Chap07:Struts2文件上传和下载

    1.struts2文件上传 1.1.struts2文件上传的基本概述 在开发web应用的时候,我们一般会为用户提供文件上传的功能,比如用户上传一张图像作为头像等.为了能上传文件,我们必须将表单的met ...

  6. 老男孩python学习自修第二十四天【多进程】

    1. 体验多进程的运行速度 #!/usr/bin/env python # _*_ coding:UTF-8 _*_ from multiprocessing import Pool import t ...

  7. 老男孩python学习自修第二十三天【多线程】

    1. 线程的创建与运行 #!/usr/bin/env python # _*_ coding:UTF-8 _*_ from threading import Thread def foo(param1 ...

  8. 老男孩python学习自修第十二天【常用模块之生成随机数】

    常用函数 import random random.random() 生成0到1之间的小数 random.randint(begin, end) 生成[begin, end]之间的整数 random. ...

  9. 基于jsp的文件上传和下载

    参考: 一.JavaWeb学习总结(五十)--文件上传和下载 此文极好,不过有几点要注意: 1.直接按照作者的代码极有可能listfile.jsp文件中 <%@taglib prefix=&qu ...

随机推荐

  1. php实现斐波那契数列

    斐波那契数列: 1 1 2 3 5 8 13 21 34 55 … 概念: 前两个值都为1,该数列从第三位开始,每一位都是当前位前两位的和 规律公式为: Fn = F(n-1) + F(n+1) F: ...

  2. linux+node.js+redis+mongodb+nginx环境的搭建

    1.推荐购买阿里云服务器,使用Centos7.0的服务器版本,在创建完全系统并进入之后,第一步是更新服务器的相关组件    yum -y install gcc gcc-c++ openssl-dev ...

  3. AJAX方式发送远程请求报错:No 'Access-Control-Allow-Origin' header

    AJAX GET方式发送远程请求,chrome开发者工具console中报错:XMLHttpRequest cannot load http://www.shikezhi.com/ajax/getDa ...

  4. day 06 元组、字典、集合的定义及其方法

    一:元组 1.定义:在()内用多个逗号分隔开多个任意类型的元素 元组用来记录多个值,当值没有改变的需求时,用元组更合适. 元组是有序的.不可变的(虽然数据不可变,但是数据的数据是可以改变的) t = ...

  5. .NET中使用Redis 转发

    .NET中使用Redis   Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博.Github.StackOverflow 等大型应用中都用其作为缓存,Redis的官网为http: ...

  6. git&github入门使用

    一.在Linux上安装Git 首先,你可以试着输入git,看看系统有没有安装Git,没有就yum一个,反正也是自己玩玩 二.版本库创建 什么是版本库呢?版本库又名仓库,英文名repository,你可 ...

  7. 获取数值型数组中大于60的元素个数,给数值型数组中不足60分的加20分。(数组,for循环,if条件判断语句)

    package com.Summer_0420.cn; /** * @author Summer * 获取数值型数组中大于60的元素个数 * 给数值型数组中不足60分的加20分 */ public c ...

  8. 朱晔的互联网架构实践心得S2E4:小议微服务的各种玩法(古典、SOA、传统、K8S、ServiceMesh)

    十几年前就有一些公司开始践行服务拆分以及SOA,六年前有了微服务的概念,于是大家开始思考SOA和微服务的关系和区别.最近三年Spring Cloud的大火把微服务的实践推到了高潮,而近两年K8S在容器 ...

  9. LeetCode 657. Robot Return to Origin

    There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of its mov ...

  10. C#.NET 大型通用信息化系统集成快速开发平台 4.6 版本 - SSO单点登录接口

    当开发的系统多了.用户多了.合作伙伴多了.对接厂商多了.开发人员多了.部署的服务器也多了,各种安全问题就暴露出来了. 如何安全的把这些系统集成在一起?实现集群的单点登录.严格统一的用户安全体系管理? ...