代码拉取完成,页面将自动刷新
// Package client
// @program: file_client_go
// @author: ygt
// @create: 2022/8/17 14:52
package client
import (
"fmt"
"log"
"math"
"net"
"net/http"
"net/url"
"os"
"path/filepath"
"strconv"
"strings"
)
// 获取文件原信息
func getFileMetadata(file string) (bool, string, int64) {
stat, err := os.Stat(file)
if err != nil {
log.Println("open file error:", err)
return false, "", 0
}
return true, stat.Name(), stat.Size()
}
// 检查路径
func checkPath(path string) (bool, string) {
d, err := os.Stat(path)
if os.IsNotExist(err) {
// 不存在
err = os.MkdirAll(path, os.ModePerm)
if os.IsPermission(err) {
return false, "无创建目录权限"
}
if err != nil {
return false, "创建文件夹失败"
}
if err == nil {
return true, path
}
}
if !d.IsDir() {
// 存在,是文件
dir, _ := filepath.Split(path)
return true, dir
}
return true, path
}
// 计算总分片数
func getTotalChunks(size int64) float64 {
var totalChunks float64
if size < chunkSize {
totalChunks = 1
} else {
num0, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(size)/float64(chunkSize)), 64)
totalChunks = math.Ceil(num0)
}
return totalChunks
}
// 从header获取文件名
func getFileNameFromHeader(resp *http.Response) string {
cd := resp.Header.Get("Content-Disposition")
s1 := strings.Split(cd, ";")
s2 := strings.Split(s1[1], "=")
str := s2[1]
if strings.HasPrefix(str, "UTF-8") {
enEscapeUrl, _ := url.QueryUnescape(str)
str1 := strings.TrimLeft(enEscapeUrl, "UTF-8''")
return str1
}
s3 := strings.TrimLeft(str, "\"")
s4 := strings.TrimRight(s3, "\"")
return s4
}
// 探测远端地址是否可用
func rawConnect(host string, port string) error {
timeout := tcpTimeout
conn, err := net.DialTimeout("tcp", net.JoinHostPort(host, port), timeout)
if err != nil {
log.Println("Connecting error:", err)
return err
}
if conn != nil {
defer func(conn net.Conn) {
err := conn.Close()
if err != nil {
log.Println("关闭连接失败")
}
}(conn)
log.Println("Opened", net.JoinHostPort(host, port))
return nil
}
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。