Go简易分布式对象存储 合并文件的所有分块为一个文件
项目
项目地址: https://github.com/Draymonders/cloud
欢迎大家Watch
or Star
缘由
由于项目中对大文件进行5MB
为一个分块上传(多线程,提升上传效率),因此所有分块上传完是要求合并的。
filepath: 分块所在目录,分块按照数字标号来有序存储
filestore: 生成一个新文件的目录位置
脚本文件
#!/bin/bash
filepath=$1
filestore=$2
echo "filepath: " $filepath
echo "filestorepath: " $filestore
if [ ! -f $filestore ]; then
echo "$filestore not exist"
else
rm -f $filestore
fi
for item in `ls $filepath | sort -n`
do
`cat $filepath/${item} >> ${filestore}`
echo "merge ${filepath/${item}} to $filestore ok"
done
echo "file store ok"
Go进行脚本控制
package main
import (
"fmt"
"os"
"os/exec"
)
const (
// dirPath = "/data/tmp/"
dirPath = "d:\\tmp\\"
)
func main() {
var cmd *exec.Cmd
filepath := dirPath + "/root5d0dd1ec/"
filestore := dirPath + "1111111.pdf"
cmd = exec.Command(dirPath+"mergeAll.sh", filepath, filestore)
// cmd.Run()
if _, err := cmd.Output(); err != nil {
fmt.Println(err)
os.Exit(1)
} else {
fmt.Println(filestore, " has been merge complete")
}
}