校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > golang實(shí)現(xiàn)ftp實(shí)時(shí)傳輸文件的案例

golang實(shí)現(xiàn)ftp實(shí)時(shí)傳輸文件的案例

熱門(mén)標(biāo)簽:赤峰電銷(xiāo) 官渡電銷(xiāo)外呼管理系統(tǒng)怎么收費(fèi) 谷歌美發(fā)店地圖標(biāo)注 利用地圖標(biāo)注位置 杭州人工智能電銷(xiāo)機(jī)器人費(fèi)用 地圖區(qū)域圖標(biāo)注后導(dǎo)出 貴州電話(huà)智能外呼系統(tǒng) 江蘇呼叫中心外呼系統(tǒng)有效果嗎 400開(kāi)頭電話(huà)怎樣申請(qǐng)

一、項(xiàng)目簡(jiǎn)介

本項(xiàng)目主要實(shí)現(xiàn)的功能是ftp客戶(hù)端不斷地將xml文件和jpg文件實(shí)時(shí)地上傳到服務(wù)器,當(dāng)然也可以是其他格式的文件。每當(dāng)ftp客戶(hù)端取到一個(gè)文件之后,將文件上傳到服務(wù)器后,然后將其刪除。

項(xiàng)目實(shí)現(xiàn)可配置,如果開(kāi)發(fā)者有類(lèi)似的需求,只需要修改配置文件就可以使用本項(xiàng)目去完成上傳文件的功能。

本項(xiàng)目打日志是按照當(dāng)天時(shí)間來(lái)生成日志文件,每天每一種類(lèi)型的日志只打一個(gè)文件。

二、項(xiàng)目結(jié)構(gòu)圖片

三、項(xiàng)目代碼

config配置中的代碼

config.ini

[path]
  xml_path     = D:\\dian\\out\\    # xml文件所在的路徑
  img_path     = D:\\dian\\out\\wave\\ # 圖片文件所在路徑
[ftp]
  ftpfile_path   = D:\\Itudou       # 在服務(wù)器上的文件存儲(chǔ)路徑
  ftp_server_ip  = 192.168.56.1      # ftp服務(wù)器的IP
  ftp_server_port = 21           # ftp服務(wù)器的端口
  ftp_server_name = 20123762        # ftp服務(wù)器的用戶(hù)名
  ftp_server_pwd  = 123456         # ftp服務(wù)器的密碼
  local_ip     = 192.168.56.1      # 本地主機(jī)的IP
  local_port    = 80           #本地主機(jī)端口
  comm_way     = udp          #ftp的通信方式
[file]
  file_img     =.jpg          #文件后綴為img
  file_xml     =.xml          #文件后綴為xml
  log_print    = ture          #是否打日志,生產(chǎn)環(huán)境上不打日志,在調(diào)式程序的時(shí)候使用

讀配置文件的代碼

daos_config.go

package daosconfig
import (
  "bufio"
  "io"
  "os"
  "strings"
)
type Config struct {
  Mymap map[string]string
  strcet string
}
func (c *Config) InitConfig(path string) {
  c.Mymap = make(map[string]string)
  f, err := os.Open(path)
  if err != nil {
    panic(err)
  }
  defer f.Close()
  r := bufio.NewReader(f)
  for {
    b, _, err := r.ReadLine()
    if err != nil {
      if err == io.EOF {
        break
      }
      panic(err)
    }
    s := strings.TrimSpace(string(b))
    if strings.Index(s, "#") == 0 {
      continue
    }
    n1 := strings.Index(s, "[")
    n2 := strings.LastIndex(s, "]")
    if n1 > -1  n2 > -1  n2 > n1+1 {
      c.strcet = strings.TrimSpace(s[n1+1 : n2])
      continue
    }
    if len(c.strcet) == 0 {
      continue
    }
    index := strings.Index(s, "=")
    if index  0 {
      continue
    }
    frist := strings.TrimSpace(s[:index])
    if len(frist) == 0 {
      continue
    }
    second := strings.TrimSpace(s[index+1:])
    pos := strings.Index(second, "\t#")
    if pos > -1 {
      second = second[0:pos]
    }
    pos = strings.Index(second, " #")
    if pos > -1 {
      second = second[0:pos]
    }
    pos = strings.Index(second, "\t//")
    if pos > -1 {
      second = second[0:pos]
    }
    pos = strings.Index(second, " //")
    if pos > -1 {
      second = second[0:pos]
    }
    if len(second) == 0 {
      continue
    }
    key := c.strcet + "=" + frist
    c.Mymap[key] = strings.TrimSpace(second)
  }
}
func (c Config) Read(node, key string) string {
  key = node + "=" + key
  v, found := c.Mymap[key]
  if !found {
    return ""
  }
  return v
}

ftp上傳文件核心代碼

daos_ftp.go

package daosftp
import (
  "fmt"
  "net"
  "os"
  "strings"
  ftp "github.com/ftp"
  "io/ioutil"
  "regexp"
  "path/filepath"
  cfg "bjdaos_tool/pkg/daosconfig"
  "bjdaos_tool/pkg/env"
  "bjdaos_tool/pkg/daoslog"
)
func getListDir(dirPth string) (files []string,files1 []string, err error) {
  dir, err := ioutil.ReadDir(dirPth)
  if err != nil {
    return nil,nil, err
  }
  PthSep := string(os.PathSeparator)
  for _, fi := range dir {
    if fi.IsDir() {
      files1 = append(files1, dirPth+PthSep+fi.Name())
      getListDir(dirPth + PthSep + fi.Name())
    }else{
      files = append(files, dirPth+PthSep+fi.Name())
    }
  }
  return files,files1, nil
}
func GetAllFileName(path string, str string) (int, []string ) {
  configPath := env.GetConfigPath()
  ftpConfig := new(cfg.Config)
  ftpConfig.InitConfig(configPath + "\\config.ini")
  logPrint := ftpConfig.Read("file", "log_print")
  files, _, err := getListDir(path)
  if err != nil {
    daoslog.WriteLog(logPrint, "System","get file path err")
  }
  fileLen := len(files)
  fileSlice := make([]string,0, fileLen)
  suffix1 := ftpConfig.Read("file", "file_img")
  suffix2 := ftpConfig.Read("file", "file_xml")
  reg_front := regexp.MustCompile("\\d{8}")
  reg_end := regexp.MustCompile("\\d{14}")
  if str == suffix1{
    for i := 0; i  fileLen; i++{
      data_front := reg_front.FindString(files[i])
      date_end := reg_end.FindString(files[i])
      imgName := data_front + "_" + date_end + str
      fileSlice = append(fileSlice, imgName)
    }
  }else if str == suffix2 {
    for i := 0; i  fileLen; i++{
      data_front := reg_front.FindString(files[i])
      date_end := reg_end.FindString(files[i])
      imgName := data_front + "_" + date_end + str
      fileSlice = append(fileSlice, imgName)
    }
  }
  return fileLen, fileSlice
}
func getLocalIpAddr() string {
  configPath := env.GetConfigPath()
  ftpConfig := new(cfg.Config)
  ftpConfig.InitConfig(configPath + "\\config.ini")
  logPrint := ftpConfig.Read("file", "log_print")
  network := ftpConfig.Read("ftp", "comm_way")
  ip := ftpConfig.Read("ftp", "local_ip")
  port := ftpConfig.Read("ftp", "local_port")
  address := ip + ":" + port
  conn, err := net.Dial(network, address)
  if err != nil {
    daoslog.WriteLog(logPrint, "System", "get local ip address err")
    return "127.0.0.1"
  }
  defer conn.Close()
  return strings.Split(conn.LocalAddr().String(), ":")[0]
}
func ftpUploadFile(ftpserver, ftpuser, pw, localFile, remoteSavePath, saveName string) {
  configPath := env.GetConfigPath()
  ftpConfig := new(cfg.Config)
  ftpConfig.InitConfig(configPath + "\\config.ini")
  logPrint := ftpConfig.Read("file", "log_print")
  ftpfile_path := ftpConfig.Read("ftp", "ftpfile_path")
  ftp, err := ftp.Connect(ftpserver)
  if err != nil {
    daoslog.WriteLog(logPrint, "System", "connect err")
  }
  err = ftp.Login(ftpuser, pw)
  if err != nil {
    daoslog.WriteLog(logPrint, "System", "Login err")
  }
  ftp.ChangeDir(ftpfile_path)
  dir, err := ftp.CurrentDir()
  ftp.MakeDir(remoteSavePath)
  ftp.ChangeDir(remoteSavePath)
  dir, _ = ftp.CurrentDir()
  daoslog.WriteLog(logPrint, "System", dir)
  file, err := os.Open(localFile)
  if err != nil {
    daoslog.WriteLog(logPrint, "System", "Open err")
  }
  defer file.Close()
  err = ftp.Stor(saveName, file)
  if err != nil {
    daoslog.WriteLog(logPrint, "System", "Stor err")
  }
  ftp.Logout()
  ftp.Quit()
  logcotent := fmt.Sprintf("%s:%s","success upload file",localFile)
  daoslog.WriteLog(logPrint, "System", logcotent)
}
func RemoveFile(filePath string, fileName string){
  configPath := env.GetConfigPath()
  ftpConfig := new(cfg.Config)
  ftpConfig.InitConfig(configPath + "\\config.ini")
  logPrint := ftpConfig.Read("file", "log_print")
  err := os.Remove(filePath + fileName)
  if err != nil {
    daoslog.WriteLog("false", "System", "file remove err!")
  } else {
    logcotent := fmt.Sprintf("%s:%s","file remove OK!",fileName)
    daoslog.WriteLog(logPrint, "System", logcotent)
  }
}
func SendXmlFileToFtpServer(filePath string, fileType string) {
  configPath := env.GetConfigPath()
  ftpConfig := new(cfg.Config)
  ftpConfig.InitConfig(configPath + "\\config.ini")
  logPrint := ftpConfig.Read("file", "log_print")
  flen, fileName := GetAllFileName(filePath, fileType)
  serverIp := getLocalIpAddr()
  ftpserverip := ftpConfig.Read("ftp", "ftp_server_ip")
  ftpPort := ftpConfig.Read("ftp", "ftp_server_port")
  ftpuser := ftpConfig.Read("ftp", "ftp_server_name")
  pw := ftpConfig.Read("ftp", "ftp_server_pwd")
  ftpserver := ftpserverip + ":" + ftpPort
  filepath.Walk(filePath, func(path string, f os.FileInfo, err error) error {
    if f == nil {
      return err
    }
    if f.IsDir() {
      return nil
    }
    for i := 0; i  flen; i++{
      if f.Name() == fileName[i] {
        logcotent := fmt.Sprintf("path=",path)
        daoslog.WriteLog(logPrint, "System", logcotent)
        pathFields := strings.Split(path, "\\")
        var domainName string
        if len(pathFields) > 3 {
          domainName = pathFields[len(pathFields)-3]
        }
        ftpUploadFile(ftpserver, ftpuser, pw, path, domainName, serverIp+"_"+fileName[i])
        RemoveFile(filePath, fileName[i])
      }
    }
    return nil
  })
}
func SendJpgFileToFtpServer(filePath string, fileType string) {
  configPath := env.GetConfigPath()
  ftpConfig := new(cfg.Config)
  ftpConfig.InitConfig(configPath + "\\config.ini")
  logPrint := ftpConfig.Read("file", "log_print")
  flen, fileName := GetAllFileName(filePath, fileType)
  serverIp := getLocalIpAddr()
  ftpserverip := ftpConfig.Read("ftp", "ftp_server_ip")
  ftpPort := ftpConfig.Read("ftp", "ftp_server_port")
  ftpuser := ftpConfig.Read("ftp", "ftp_server_name")
  pw := ftpConfig.Read("ftp", "ftp_server_pwd")
  ftpserver := ftpserverip + ":" + ftpPort
  filepath.Walk(filePath, func(path string, f os.FileInfo, err error) error {
    if f == nil {
      return err
    }
    if f.IsDir() {
      return nil
    }
    for i := 0; i  flen; i++{
      if f.Name() == fileName[i] {
        logcotent := fmt.Sprintf("path=",path)
        daoslog.WriteLog(logPrint, "System", logcotent)
        pathFields := strings.Split(path, "\\")
        var domainName string
        if len(pathFields) > 3 {
          domainName = pathFields[len(pathFields)-3]
        }
        ftpUploadFile(ftpserver, ftpuser, pw, path, domainName, serverIp+"_"+fileName[i])
        RemoveFile(filePath, fileName[i])
      }
    }
    return nil
  })
}

打日志的代碼

daos_log.go

package daoslog
import (
  "fmt"
  "log"
  "os"
  "github.com/golang/glog"
  "time"
  "bjdaos_tool/pkg/env"
)
func WriteLog(islog, logtype , errcontent string) {
  if islog == "false" {
    return
  }
  if logtype != "Info"  logtype!= "Debug"  logtype!= "Error"  logtype != "System" {
    glog.Error("this is not a logtype ")
    return
  }
  data := time.Now().Format("20060102")
  logPath := env.GetConLogPath()
  logFilea := logPath + "\\" + data+"_"+ logtype+".log"
  errcontent = "[" +errcontent + "]"
  logFile, err := os.OpenFile(logFilea, os.O_RDWR | os.O_CREATE, 0777)
  if err != nil {
    fmt.Printf("open file error=%s\r\n", err.Error())
    os.Exit(-1)
  }
  logger := log.New(logFile, "{"+logtype+"} ", log.Ldate | log.Ltime | log.Lshortfile)
  logger.Println(errcontent)
}

路徑處理代碼

daos-evn.go

package env
import (
  "os"
  "runtime"
)
var ostype = runtime.GOOS
func GetProjectPath() string{
  var projectPath string
  projectPath, _ = os.Getwd()
  return projectPath
}
func GetConfigPath() string{
  path := GetProjectPath()
  if ostype == "windows"{
    path = path + "\\" + "config\\"
  }else if ostype == "linux"{
    path = path +"/" + "config/"
  }
  return path
}
func GetConLogPath() string{
  path := GetProjectPath()
  if ostype == "windows"{
    path = path + "\\log\\"
  }else if ostype == "linux"{
    path = path + "/log/"
  }
  return path
}

四、總結(jié)

主函數(shù):

main.go

package main
import (
  "bjdaos_tool/pkg/daosftp"
  "bjdaos_tool/pkg/env"
  cfg "bjdaos_tool/pkg/daosconfig"
)
func main(){
  configPath := env.GetConfigPath()
  ftpConfig := new(cfg.Config)
  ftpConfig.InitConfig(configPath + "\\config.ini")
  xml_path := ftpConfig.Read("path", "xml_path")
  img_path := ftpConfig.Read("path", "img_path")
  file_img := ftpConfig.Read("file", "file_img")
  file_xml := ftpConfig.Read("file", "file_xml")
  for{
    daosftp.SendXmlFileToFtpServer(xml_path, file_xml)
    daosftp.SendJpgFileToFtpServer(img_path, file_img)
  }
}

本項(xiàng)目依賴(lài)包:

完整代碼:https://github.com/guoshijiang/go_ftp

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang http 連接超時(shí)和傳輸超時(shí)的例子
  • golang實(shí)現(xiàn)整型和字節(jié)數(shù)組之間的轉(zhuǎn)換操作
  • golang-gin-mgo高并發(fā)服務(wù)器搭建教程
  • Golang中優(yōu)秀的消息隊(duì)列NSQ基礎(chǔ)安裝及使用詳解
  • Golang中基礎(chǔ)的命令行模塊urfave/cli的用法說(shuō)明
  • Golang使用第三方包viper讀取yaml配置信息操作
  • 聊聊Golang中很好用的viper配置模塊

標(biāo)簽:武漢 宜春 保定 松原 河池 鷹潭 黔西 泰安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang實(shí)現(xiàn)ftp實(shí)時(shí)傳輸文件的案例》,本文關(guān)鍵詞  golang,實(shí)現(xiàn),ftp,實(shí)時(shí),傳輸,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang實(shí)現(xiàn)ftp實(shí)時(shí)傳輸文件的案例》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于golang實(shí)現(xiàn)ftp實(shí)時(shí)傳輸文件的案例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美三级日本三级少妇99| 美女一区二区三区| 欧美高清在线一区| 久久美女高清视频| 国产精品久久久一本精品| 亚洲国产经典视频| 亚洲嫩草精品久久| 亚洲综合999| 午夜精品视频一区| 久久国产乱子精品免费女| 久久99日本精品| 国产aⅴ综合色| 91在线porny国产在线看| 色综合久久久久久久久久久| 色婷婷久久久综合中文字幕| 欧美老肥妇做.爰bbww| 91精品国产综合久久国产大片| 日韩一级片网址| 国产欧美精品一区二区色综合朱莉| 国产精品久久影院| 午夜精品一区二区三区电影天堂| 美女一区二区三区在线观看| 国产91丝袜在线播放0| 久久草av在线| 国产色91在线| 中文字幕一区二区三区四区不卡 | 精油按摩中文字幕久久| 久久国产日韩欧美精品| 国产乱子轮精品视频| 99re这里只有精品首页| 欧美日韩精品一区二区三区四区| 日韩免费电影一区| 欧美国产一区二区| 日韩精品乱码免费| 国产成人精品一区二区三区四区| 色综合网站在线| 精品久久国产97色综合| 亚洲欧美日韩成人高清在线一区| 欧美a级理论片| 一本一本久久a久久精品综合麻豆| 91精品国产综合久久久久久| 日本一区二区三区高清不卡| 亚洲一二三四在线观看| 免费高清在线视频一区·| 91免费国产视频网站| 欧美第一区第二区| 亚洲一区二区三区爽爽爽爽爽| 久久99热99| 欧美日本视频在线| 亚洲四区在线观看| 国产成人精品免费| 精品国产精品一区二区夜夜嗨| 一区二区久久久久久| 国产成人午夜99999| 日韩视频在线你懂得| 亚洲一区二区三区自拍| 99久久免费精品高清特色大片| 日韩免费观看2025年上映的电影| 亚洲一区二区3| 99国产精品国产精品久久| 国产视频不卡一区| 国产在线精品免费| 日韩欧美一区二区免费| 日韩国产一二三区| 欧美日韩亚洲综合一区二区三区| 国产精品久久久久久久久免费樱桃| 国产一区二区三区四| 26uuuu精品一区二区| 久久69国产一区二区蜜臀| 欧美一区二区成人6969| 五月天激情综合网| 在线电影欧美成精品| 视频在线观看一区| 日韩一区二区免费在线观看| 奇米一区二区三区| 日韩视频一区二区三区在线播放| 免费高清在线视频一区·| 日韩精品一区二区三区视频播放| 免费成人av资源网| 久久综合一区二区| 国产成人在线视频播放| 中文字幕乱码一区二区免费| 成人免费高清在线| 亚洲欧美激情插| 精品视频一区 二区 三区| 日韩av一区二区三区四区| 日韩欧美国产一区二区在线播放| 久久99热99| 最近日韩中文字幕| 欧美日韩日日骚| 精品一区二区三区免费| 国产精品女同互慰在线看| 91美女在线视频| 日韩国产欧美在线播放| 2023国产精品| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲午夜视频在线观看| 精品入口麻豆88视频| 成人av网站在线观看免费| 一级中文字幕一区二区| 555www色欧美视频| 成人av免费在线播放| 亚洲综合在线视频| 久久麻豆一区二区| 欧美体内she精高潮| 久88久久88久久久| 一区二区三区在线免费视频 | 国产麻豆精品95视频| 1000精品久久久久久久久| 欧美日韩夫妻久久| 国产成人午夜视频| 石原莉奈在线亚洲二区| 欧美国产97人人爽人人喊| 欧美老人xxxx18| 99精品久久免费看蜜臀剧情介绍| 日本欧美久久久久免费播放网| 国产欧美中文在线| 538在线一区二区精品国产| av在线不卡观看免费观看| 奇米影视在线99精品| 亚洲激情综合网| 久久精品一区八戒影视| 91精品国产免费久久综合| 99久久精品国产观看| 国产久卡久卡久卡久卡视频精品| 亚洲图片一区二区| 自拍偷在线精品自拍偷无码专区| 精品久久99ma| 3d成人h动漫网站入口| 91麻豆视频网站| 成人免费视频视频在线观看免费| 蜜桃视频在线观看一区二区| 一区二区不卡在线视频 午夜欧美不卡在 | 国产jizzjizz一区二区| 免费欧美在线视频| 亚洲电影视频在线| 亚洲精品一二三| 国产精品视频你懂的| 欧美zozo另类异族| 日韩精品一区二区三区四区| 欧美久久高跟鞋激| 欧美三片在线视频观看| 色婷婷久久综合| 色哟哟一区二区三区| 成人午夜伦理影院| 成人激情免费电影网址| 成人高清在线视频| 成人小视频免费观看| 成人午夜电影久久影院| 成人午夜在线免费| 91小视频在线| 91激情五月电影| 精品视频在线免费观看| 欧美久久久久久久久中文字幕| 欧美日韩成人综合天天影院| 欧美日韩aaaaa| 欧美一区二区在线视频| 日韩精品影音先锋| 国产三级一区二区| 亚洲欧洲在线观看av| 亚洲精品日日夜夜| 午夜精品一区二区三区电影天堂 | 欧美激情艳妇裸体舞| 精品成人佐山爱一区二区| 久久精品一区二区三区不卡 | 日本一区二区综合亚洲| 一色屋精品亚洲香蕉网站| 一区二区免费看| 日韩高清在线一区| 国产一区视频网站| 99久久精品99国产精品 | 成人午夜看片网址| 欧美伊人久久大香线蕉综合69 | 亚洲欧洲综合另类| 亚洲高清视频在线| 捆绑紧缚一区二区三区视频| 国产真实乱对白精彩久久| 99riav久久精品riav| 88在线观看91蜜桃国自产| 精品久久久久久久一区二区蜜臀| 国产日韩欧美在线一区| 亚洲天堂a在线| 另类专区欧美蜜桃臀第一页| 国产suv精品一区二区6| 在线观看亚洲精品| 精品国产自在久精品国产| 亚洲欧美在线另类| 免费看欧美美女黄的网站| 国产成人亚洲综合色影视| 欧美私人免费视频| 国产女人水真多18毛片18精品视频| 亚洲免费观看在线视频| 老司机精品视频一区二区三区| 91视频91自| 久久久www成人免费无遮挡大片| 亚洲卡通欧美制服中文| 国产在线精品视频| 4hu四虎永久在线影院成人| 日韩理论片在线| 国产一区二区导航在线播放|