zoukankan      html  css  js  c++  java
  • python利用socket写一个文件上传

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

    2.代码:

     1 #模拟服务端
     2 import  subprocess
     3 import os
     4 import  socket
     5 sk=socket.socket()
     6 print(sk)
     7 address=('127.0.0.1',8080)
     8 sk.bind(address)
     9 BASE_DIR=os.path.dirname(os.path.abspath(__file__))#获取绝对路径
    10 
    11 sk.listen(3)
    12 print('waiting......')
    13 # conn=sk.accept()
    14 # print(conn)
    15 
    16 while 1:
    17     conn,addr=sk.accept()
    18     while True:
    19      data=conn.recv(1024)
    20      cmd,filename,filesize=str(data,'utf8').split('|')
    21      path=os.path.join(BASE_DIR,'yuan',filename)#拼接出要写入的文件地址
    22      print(path)
    23      filesize=int(filesize)
    24 
    25      f=open(path,'ab')
    26      has_receiv=0
    27      while has_receiv!=filesize:
    28          data=conn.recv(1024)
    29          f.write(data)
    30      f.close()
    31 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效果:

  • 相关阅读:
    linux下硬盘分区、格式化以及文件管理系统
    linux下的文档处理及tar命令
    linux文件及目录的权限管理
    linux用户和群组
    linux下mysql的安装与使用
    linux上uwsgi+nginx+django发布项目
    linux虚拟环境搭建
    linux目录文件操作
    linux基本命令
    rbac组件之权限初始化(五)
  • 原文地址:https://www.cnblogs.com/lanyinhao/p/9214035.html
Copyright © 2011-2022 走看看