goudp⽂件传输服务器,golang实现ftp实时传输⽂件的案例⼀、项⽬简介
本项⽬主要实现的功能是ftp客户端不断地将xml⽂件和jpg⽂件实时地上传到服务器,当然也可以是其他格式的⽂件。每当ftp客户端取到⼀个⽂件之后,将⽂件上传到服务器后,然后将其删除。
项⽬实现可配置,如果开发者有类似的需求,只需要修改配置⽂件就可以使⽤本项⽬去完成上传⽂件的功能。
本项⽬打⽇志是按照当天时间来⽣成⽇志⽂件,每天每⼀种类型的⽇志只打⼀个⽂件。
⼆、项⽬结构图⽚
三、项⽬代码
config配置中的代码
config.ini
[path]
xml_path = D:\\dian\\out\\ # xml⽂件所在的路径
img_path = D:\\dian\\out\\wave\\ # 图⽚⽂件所在路径
[ftp]
ftpfile_path = D:\\Itudou # 在服务器上的⽂件存储路径
ftp_server_ip = 192.168.56.1 # ftp服务器的IP
ftp_server_port = 21 # ftp服务器的端⼝
ftp_server_name = 20123762 # ftp服务器的⽤户名
ftp_server_pwd = 123456 # ftp服务器的密码
local_ip = 192.168.56.1 # 本地主机的IP
local_port = 80 #本地主机端⼝
comm_way = udp #ftp的通信⽅式
[file]
file_img =.jpg #⽂件后缀为img
file_xml =.xml #⽂件后缀为xml
log_print = ture #是否打⽇志,⽣产环境上不打⽇志,在调式程序的时候使⽤读配置⽂件的代码
package daosconfig
import (
"bufio"
"io"
"os"
"strings"
)
type Config struct {
Mymap map[string]string
strcet string
}
getsavefilenamefunc (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上传⽂件核⼼代码
package daosftp
import (
"fmt"
"net"
"os"
"strings"
ftp "github/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])
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论