1.先将一张图片拖入‘文件上传’的目录下,利用socket把这张图片写到叫‘yuan’的文件中

2.代码:

 #模拟服务端
import subprocess
import os
import socket
sk=socket.socket()
print(sk)
address=('127.0.0.1',8080)
sk.bind(address)
BASE_DIR=os.path.dirname(os.path.abspath(__file__))#获取绝对路径 sk.listen(3)
print('waiting......')
# conn=sk.accept()
# print(conn) while 1:
conn,addr=sk.accept()
while True:
data=conn.recv(1024)
cmd,filename,filesize=str(data,'utf8').split('|')
path=os.path.join(BASE_DIR,'yuan',filename)#拼接出要写入的文件地址
print(path)
filesize=int(filesize) f=open(path,'ab')
has_receiv=0
while has_receiv!=filesize:
data=conn.recv(1024)
f.write(data)
f.close()
sk.close()
模拟客户端
import socket
import os
sk=socket.socket()
#print(sk)
address=('127.0.0.1',8080)
sk.connect(address)
BASE_DIR=os.path.dirname(os.path.abspath(__file__))#获取相对路径
print(BASE_DIR)
while 1:
inp =input('>>>>>').strip()#post|图片.jpg
cmd,path=inp.split('|')#字符分割放入两变量中
path=os.path.join(BASE_DIR,path)#join在文件最末尾处拼接字符上去
#print('path',path)
filename=os.path.basename(path)#获取文件名,返回path最后的文件名。如何path以/或\结尾,那么就会返回空值
file_size=os.stat(path).st_size#获取文件大小(os.stat() 方法用于在给定的路径上执行一个系统 stat 的调用,st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。)
file_info='post|%s|%s'%(filename,file_size)#将文件的所有数据(文件名,文件大小)做成一个字符
sk.sendall(bytes(file_info,'utf8 ')) has_sent = 0
# with open(path,'rb') as f:
# data=f.read(1024)
# sk.sendall(data)
# has_sent+=len(data)
# f.close()
# print('上传成功') #第二种读取图片文件的信息
fa=open(path,'rb')
while has_sent!=file_size:
data=fa.read(1024)
sk.send(data)
has_sent+=len(data)
fa.close()
print('上传成功') sk.close()

3效果:

python利用socket写一个文件上传的更多相关文章

  1. 利用Bootstrap简单实现一个文件上传进度条

    © 版权声明:本文为博主原创文章,转载请注明出处 说明: 1. 使用commons-fileupload.jar实现文件上传及进度监听 2. 使用bootstrap的进度条进行页面显示 3. 因为进度 ...

  2. 基于socket实现大文件上传

    import socket 1.客户端: 操作流程: 先拿到文件--->获取文件大小---->创建字典 1.制作表头 header  如何得到 他是一个二进制字符串 序列化得到 字典字符串 ...

  3. [转]一个文件上传的jquery插件

    http://www.jb51.net/article/51547.htm 这篇文章主要介绍了使用ajaxfileupload.js实现ajax上传文件php版,需要的朋友可以参考下     无论是P ...

  4. 利用apache组件实现文件上传

    实现文件上传需要引入: commons-fileupload-1.3.2.jar commons-io-2.5.jar commons-logging-1.2.jar <!DOCTYPE htm ...

  5. 利用Selenium实现图片文件上传的两种方式介绍

    在实现UI自动化测试过程中,有一类需求是实现图片上传,这种需求根据开发的实现方式,UI的实现方式也会不同. 一.直接利用Selenium实现 这种方式是最简单的一种实现方式,但是依赖于开发的实现. 当 ...

  6. Java一个文件上传工具类

    /** * 文件上传 * * @author cary * @since 2012-12-19 下午2:22:12 */ public class FileUploader { static fina ...

  7. 基于python的selenium两种文件上传操作

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径,这里不做过多赘述,前文有相关操作方法. 方法二.非input标签上传 这种上传方 ...

  8. python接口自动化测试——简单的文件上传代码实现,人人网登陆后上传图片举例

    import requests '''人人网登陆,图片上传 '''def loginData(): '''登录请求参数''' data = { 'email': '13484545195', 'ico ...

  9. 如何用css画一个文件上传图案?

    如下图,如果是你,你会怎么实现: 通常我们会通过字体图标来显示中间的加号,外层用一个div包裹即可:或者使用伪元素来模拟中间的一横一竖,这都比较麻烦. 其实我们可以直接使用div+css就可以实现. ...

随机推荐

  1. SpringMVC和Struts是线程安全的吗?为什么?

    线程不安全的.(其实我觉得回答为:存在线程安全问题 这样比较好点) 原因如下: 第一点,先理解为何线程不安全 1 struts1的action是单例的,所以存在线程安全问题(struts2是多例的,不 ...

  2. Ribbon 负载均衡机制

    Ribbon 提供了几个负载均衡的组件,其目的就是让请求转给合适的服务器处理,因此,如何选择合适的服务器变成了负载均衡机制的核心,Ribbon 提供了如下负载均衡规则: RoundRobinRule: ...

  3. 解决openwrt中文界面异常

    openwrt的luci以中文字体显示时,出现以下异常情况: 是因为该固件编译了其他的luci application,我是编译了meshwizard. 可作如下修改: scp登陆打开/usr/lib ...

  4. MIME 设置

    1,打开iis7,选择你要设置网站,打开mime类型选项 2,找到.rar的mime类型,复制他的类型 3,复制后选项添加,在文件扩展名那一栏填入.*,然后在下面的mime类型复制你刚复制的appli ...

  5. C# 调用Sql server 执行存储过程总是返回-1

    调用存储过程代码如下: 今天在写存储过程调用时遇到如下问题: int value = cmd.ExecuteNonQuery();//执行总是返回-1:且存储过程在sql 可视化执行窗口可正常执行-- ...

  6. 为IE内核的WebBrowser控件内存泄漏所烦恼的可以考虑用Cefsharp代替它!

    为IE内核的WebBrowser控件内存泄漏所烦恼的朋友们,可以考虑用Cefsharp代替WebBrowser控件 特意做了一个程序来测试 利用Cefsharp做控件,访问网站.每分钟刷新2次,初始时 ...

  7. 测试教程网.unittest教程.5. 实例: 找出所有是弱密码的用户

    From: http://www.testclass.net/pyunit/test_example_3/ 背景 当我们的测试数据是下面这些的时候,我们的用例是有问题的. [ {"name& ...

  8. autoconf配置的项目,编译debug版本

    ./configure CFLAGS=" -g " 当然,c++代码就把 CFALGS 改成 CPPFLAGS

  9. redis(redis概念,运用场景,如何操作基本数据类型)

    什么是redis:Nosql一种缓存数据库 redis可以干什么:redis可以减轻对数据库的请求压力如果不使用缓存:客服端->控制层->业务层->dao层使用缓存:客服端-> ...

  10. JVM异常之:直接内存溢出

    示例: package com.dxz.jvm; import java.lang.reflect.Field; import sun.misc.Unsafe; /** * @Described:直接 ...