zoukankan      html  css  js  c++  java
  • python文件上传

    实现:client上传图片文件到server

    如下图所示,图片与post_client.py在同一当前目录

    -------------------post_server.py-----------------------------------------

    import subprocess
    #subprocess.Popen,主要用Popen这个类实现shell
    import os
    import socket
    sk=socket.socket()
    print(sk)
    address=('127.0.0.1',8005)
    sk.bind(address)
    sk.listen(3)
    print('waiting.....')
    BASE_DIR=os.path.dirname(os.path.abspath(__file__))
    while True:
    conn,addr = sk.accept()
    print(addr)
    while True:
    data=conn.recv(1024) #接收
    cmd,filename,filesize=str(data,'utf-8').split('|') #用三个变量解析接收的并用|分隔
    path=os.path.join(BASE_DIR,'yuan','filename') #路径拼接,这里指定在yuan下
    filesize=int(filesize)

    #循环收
    f=open(path,'ab')
    has_receive=0
    while has_receive!=filesize:
    data=conn.recv(1024)
    f.write(data)
    has_receive+=len(data)
    f.close()


    --------------------post_client.py------------------------
    import socket
    import os
    sk=socket.socket()
    print(sk)
    address=('127.0.0.1',8005)
    sk.connect(address)
    BASE_DIR=os.path.dirname(os.path.abspath(__file__))

    while True:
    inp=input('>>>').strip() #post|1.png
    cmd,path = inp.split('|') #两个变量接收,并用|分隔开
    path=os.path.join(BASE_DIR,path) #路径拼接-----绝对路径

    filename=os.path.basename(path) #你放参数路径,它会取到最后的文件名字
    file_size=os.stat(path).st_size # 看文件大小
    file_info='post|%s|%s'%(filename,file_size) #
    sk.sendall(bytes(file_info,'utf-8')) #发过去
    #循环发
    f = open(path, 'rb') # 打开
    has_sent=0 #已发的
    while has_sent !=file_size:
    data=f.read(1024) #每次1024个的一段段发
    sk.sendall(data)
    has_sent+=len(data)
    f.close()
    print('上传成功')




    sk.close()
  • 相关阅读:
    iptables阐述防火墙
    升级openssh基于openssl
    Linux密钥认证错误解决
    keychain实现ssh对秘钥免登陆免输入密码
    rpcbind服务死活启动不了
    samba温故知新
    Linux下umask的缺省默认权限
    tomcat在线部署且查看堆栈状态
    mariadb多实例搭建
    rarlinux基于linux-x64
  • 原文地址:https://www.cnblogs.com/dbslinux/p/11242219.html
Copyright © 2011-2022 走看看