文件工具
This commit is contained in:
106
core/utils/file.go
Normal file
106
core/utils/file.go
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"archive/zip"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"omc/handle/model"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
//BJ/HX/RJ/OMC/FM/告警文件生成时间
|
||||||
|
///FTP根目录/省份简称/专业简称/厂家编码/OMC名称/数据类别/日期或时间/
|
||||||
|
//<省份简称>-<数据类别>-<网元类型>[-网元子类]-<主机编号>-<数据版本>-<数据时间>[-登录用户名][-同步请求标识][-Ri][-统计周期] [-序列号].<后缀>
|
||||||
|
//BJ-FM-OMC-主机编码-v0-告警文件生成时间-001.txt
|
||||||
|
|
||||||
|
type FileMeta struct {
|
||||||
|
DirRoot string `json:"dir_root"`
|
||||||
|
Province string `json:"province"` //网元所在省份
|
||||||
|
DeviceCode string `json:"device_code"` //主机编码 四位,每1位可用0-9、A-Z编码
|
||||||
|
Index string `json:"index"` //文件标识
|
||||||
|
Compress bool `json:"compress"` //文件是否压缩
|
||||||
|
ReqId string `json:"req_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// func FileName(meta *FileMeta) string {
|
||||||
|
// reqIdStr := fmt.Sprintf("%03s", meta.ReqId)
|
||||||
|
// timeStr := time.Now().Format()
|
||||||
|
// fileName := strings.Join([]string{meta.Province, "FM", "OMC", meta.DeviceCode, "v0", meta.Time, meta.Index}, "-", reqIdStr)
|
||||||
|
// return strings.ToUpper(fileName)
|
||||||
|
// }
|
||||||
|
|
||||||
|
func CreateFile(fileName string, data []model.OmcAlarm) error {
|
||||||
|
filePath := fileName
|
||||||
|
|
||||||
|
// 创建或打开文件
|
||||||
|
file, err := os.Create(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
// 遍历切片并将每个元素序列化为 JSON 字符串并写入文件
|
||||||
|
for _, alarm := range data {
|
||||||
|
jsonData, err := json.Marshal(alarm)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入 JSON 字符串到文件,并换行
|
||||||
|
_, err = file.WriteString(string(jsonData) + "\r\n")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将文件添加到 ZIP 压缩文件
|
||||||
|
func FileToZip(zipFileName, filePath string) error {
|
||||||
|
// 创建一个新的 ZIP 文件
|
||||||
|
newZipFile, err := os.Create(zipFileName)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("创建 ZIP 文件失败: %w", err)
|
||||||
|
}
|
||||||
|
defer newZipFile.Close()
|
||||||
|
|
||||||
|
// 创建 ZIP 写入器
|
||||||
|
zipWriter := zip.NewWriter(newZipFile)
|
||||||
|
defer zipWriter.Close()
|
||||||
|
|
||||||
|
fileToCompress, err := os.Open(filePath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("打开文件失败: %w", err)
|
||||||
|
}
|
||||||
|
defer fileToCompress.Close()
|
||||||
|
|
||||||
|
// 获取文件信息
|
||||||
|
fileInfo, err := fileToCompress.Stat()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("获取文件信息失败: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建文件头
|
||||||
|
header, err := zip.FileInfoHeader(fileInfo)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("创建文件头失败: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置文件头中的名称
|
||||||
|
header.Name = fileInfo.Name()
|
||||||
|
|
||||||
|
// 创建文件在 ZIP 中的写入器
|
||||||
|
writer, err := zipWriter.CreateHeader(header)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("创建文件写入器失败: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将文件内容复制到 ZIP 文件中
|
||||||
|
_, err = io.Copy(writer, fileToCompress)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("将文件内容复制到 ZIP 失败: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user