linux、windows系统间传输文件


日常工作中经常涉及到系统间的文件传输,下面就简单说一下常用的方法 linux——windows 工具:winscp、SecureCRT、Zmodem(sz, rz) linux——linux 工具:scp、rsync (具体用法,参照man手册) 通用方法:Python快捷搭建http服务器   一、直接使用python的SimpleHTTPServer 模块搭建http下载服务器(只能下载不能上传)
python -m SimpleHTTPServer 8000   
#将当前目录作为http下载服务器的根目录,可以使用wget 命令直接下载文件,如果wget 的uri为空,返回http服务器启动所在目录中文件
eg: wget 127.0.0.1:8000/sample.txt  #下载sample.txt文件
eg : wget 127.0.0.1:8000        #列出目录内容

  二、利用Python开发http简单的文件服务器(支持上传、下载)

#!/usr/bin/python

import re
import sys
import urllib
import httplib2
import os
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class Webhandler(BaseHTTPRequestHandler):
     #客户端Get请求的处理函数
    def do_GET(self):
        path, args = urllib.splitquery(self.path)

        self.send_response(200)
        self.send_header('Content-type', 'application/octet-stream')
        self.end_headers()

        #将当前目录与uri拼接获取文件(夹)的绝对路径
        target_file = os.getcwd() + path
        if os.path.exists(target_file) == False:
            self.wfile.write(target_file + 'isn\' exists')
        elif os.path.isdir(target_file):
             #如果是个文件夹,就直接递归列出文件夹的详细内容
            file_list = os.popen("ls -lR").read()
            self.wfile.write(file_list)
        elif  os.path.isfile(target_file):
             #如果是个文件,就打开文件然后将文件内容发送给客户端
            f = open(target_file, 'rb')
            self.wfile.write(f.read())
            f.close()
 
#客户端POST请求的处理函数
    def do_POST(self):
        path, args = urllib.splitquery(self.path)
        filename = os.path.basename(path)

        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

     #读取post请求的body,如果不为空就按照uri最后的名称作为文件名
     #将body写入到文件并保存到当前文件夹
      datas = self.rfile.read(int(self.headers['content-length']))
        if datas != None:
            f = open(filename, 'wb')
            f.write(datas)
            f.close()

if __name__ == '__main__':
    try:
        port = int(sys.argv[1])
        print 'port is %d' % port
        server = HTTPServer(('', port), Webhandler)
        print 'Welcome to my website !'
        server.serve_forever()

    except KeyboardInterrupt:
        print '^C received, shutting down server'
        server.socket.close()

注:1. 上述这段Python代码只是简单实现了文件上传、下载功能,需要的话可以添加自己的处理逻辑。

将上述代码保存到一个文本文件file_server.py中,然后把该文件拷贝到保存文件的目录下,执行 python ./file_server.py 8000,启动监听8000端口的http服务器

如果执行的时候提示缺少相应的模块可以通过pip的方式安装:

  1. sudo yum install python-setuptools -y; easy_install pip 安装python包管理器pip
  2. 创建文件 ~/.pip/pip.conf,然后添加如下内容(将pip镜像源改成国内的,加快速度)
    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    

 

  三. 使用方法

客户端可以通过如下命令进行下载上传操作:

#下载文件
wget 127.0.0.1:8000/note.txt    #下载http服务器上的note.txt文件

#上传文件: 
 curl --data-binary @note.txt 127.0.0.1:8000/note1.txt    #将本地的note.txt文件上传到http服务器上并重命名为note1.txt
优质内容筛选与推荐>>
1、J2SE总结
2、vim快捷方式
3、SPS的版本控制
4、vertica,greenplumr容器安装
5、Codeforces 893 A B 比赛 思维


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn