Golang语言 上传文件

import (
    "bufio"
    "flag"
    "fmt"
    "io"
    "log"
    "os"
    "os/exec"
    "path/filepath"
    "strings"
    "time"
)
const (
    filename = "c:\\myetc\\remote.etc"
)
func main() {
    var servicefilepath string
    var serviceIP string
    var passwd string
    var serviceusername string
    var port string
    //参数判断
    if len(os.Args) == 1 {
        fmt.Printf("usage: %s filename1 filename2 ...\n", filepath.Base(os.Args[0]))
        return
    }
    //打开之前应该判断文件是否存在
    _, err := os.Stat(filename)
    if err != nil {
        log.Println("文件不存在!")
        log.Println("设置的样例:c:\\myetc\\remote.etc"
        log.Println("m_ta/m_ta@192.168.224.128:22:/home/m_ta/src")
        return
    }
    f, err := os.Open(filename) //打开文件
    //打开文件出错处理
    defer func() {
        f.Close()
    }()
    if nil == err {
        buff := bufio.NewReader(f) //读入缓存
        for {
            line, err := buff.ReadString('\n') //以'\n'为结束符读入一行
            if err != nil || io.EOF == err {
                break
            }
            //如果是#开头的则认为是注释符
            strings.Trim(line, " ")
            if ok := strings.Contains(line, "#"); ok {
                continue
            }
            //去回车换行符
            //样例 m_ta/m_ta@192.168.224.128:22:/home/m_ta/src
            splitstrings := strings.FieldsFunc(strings.Replace(line, "\r\n", "", -1), func(char rune) bool {
                switch char {
                case ':', '/', '@':
                    return true
                }
                return false
            })
            passwd, serviceusername, serviceIP, port = splitstrings[0], splitstrings[1], splitstrings[2], splitstrings[3]
            servicefilepath = "/" + strings.Join(splitstrings[4:], "/")
        }
        parameter := serviceusername + "@" + serviceIP + ":" + servicefilepath
        flag.Parse() // Scans the arg list and sets up flags
        for i := 0; i < flag.NArg(); i++ {
            cmd := exec.Command("pscp.exe", "-P", port, "-pw", passwd, flag.Arg(i), parameter)
            err := cmd.Run()
            if err != nil {
                log.Print(err)
            } else {
                log.Print("OK!")
            }
        }
        time.Sleep(1 * time.Second)
    }
}

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-04-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数说工作室

【SAS Says】基础篇:ODS的使用(上)

你不可能总是在SAS上查看结果,如果结果很多你要一一的讲结果复制到word中去,有ODS就好啦!它可以把SAS的结果直接输出到word、PDF等文件中。 5.1...

7166
来自专栏Golang语言社区

Golang语言 上传文件

import ( "bufio" "flag" "fmt" "io" "log" "os" "os/ex...

3708
来自专栏大内老A

MVVM(Knockout.js)的新尝试:多个Page,一个ViewModel

对于面向数据的Web应用来说,MVVM模式是一项不错的选择,它借助JS框架提供的“绑定”机制是我们无需过多关注UI(HTML)的细节,只需要操作绑定的数据源。M...

3629
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(57)-插件---ueditor使用

目录: 前言 开发环境 知识点 初始使用 自定义工具栏 设置和读取编辑器内容 文件上传 ueditor加水印 -------------------------...

3735
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-工作流设计-表单布局

前言:这一节比较有趣。基本纯UI,但是不是很复杂 有了实现表单的打印和更加符合流程表单方式,我们必须自定义布局来适合业务场景打印!我们想要什么效果?看下图 (我...

2259
来自专栏landv

vb.net 结束进程

1753
来自专栏云端架构

【云端架构】前端js键盘绑定事件

在Web开发中,有时候我们可能会把页面中的某些按钮绑定到键盘的输入事件中。以下代码能方便实现我们需要的功能。

38210
来自专栏Python、Flask、Django

Go学习之 - 一个简单的web服务

1312
来自专栏互联网杂技

React中的-- 数据流

简介 React的组件简单理解起来其实就是一个函数,这个函数会接收props和state作为参数,然后进行相应的逻辑处理,最终返回该组件的虚拟DOM展现。在Re...

3669
来自专栏HT

基于HTML5 Canvas 点击添加 2D 3D 机柜模型

今天又返回好好地消化了一下我们的数据容器 DataModel,这里给新手做一个典型的数据模型事件处理的例子作为参考。这个例子看起来很简单,实际上结合了数据模型中...

2728

扫码关注云+社区

领取腾讯云代金券