init
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"alistControl/alist"
|
||||
"fmt"
|
||||
"github.com/schollz/progressbar/v3"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
func main() {
|
||||
client := alistsdk.NewClient("https://alist-home.s1f.ren", "kyou", "WFBDGnBfjjkVowen2", false, 200)
|
||||
user, err := client.Login()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(user)
|
||||
path := "/游戏/我的世界/常青藤Mods"
|
||||
list, err := client.List(path, "", 1, 100, false)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
// 获取当前文件夹下 modes 目录的的文件列表,判断是否存在,不存在则上传
|
||||
currentDir, err := os.Getwd()
|
||||
if err != nil {
|
||||
fmt.Println("无法获取当前工作目录:", err)
|
||||
return
|
||||
}
|
||||
// 构建mods文件夹的路径
|
||||
modsPath := currentDir + "/mods"
|
||||
// 读取mods文件夹中的所有文件和子目录
|
||||
files, err := os.ReadDir(modsPath)
|
||||
if err != nil {
|
||||
fmt.Println("无法读取mods文件夹:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 打印所有文件和子目录的名称
|
||||
for _, alistFile := range list {
|
||||
hasFile := false
|
||||
for _, file := range files {
|
||||
fileInfo, _ := file.Info()
|
||||
fileSize := fileInfo.Size()
|
||||
if file.Name() == alistFile.Name && fileSize == alistFile.Size {
|
||||
fmt.Println("文件已存在")
|
||||
hasFile = true
|
||||
}
|
||||
if !hasFile {
|
||||
fmt.Printf("%s文件不存在,开始下载\n", file.Name())
|
||||
// 获取mods文件夹中的文件路径
|
||||
filePath := modsPath + "/" + file.Name()
|
||||
fileUrl := client.GetFileDownloadUrl(path+"/"+file.Name(), user.BasePath)
|
||||
err = downloadFile(filePath, fileUrl)
|
||||
if err != nil {
|
||||
fmt.Println("下载文件失败:", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// downloadFile 下载文件并保存到指定路径,显示文件名和进度条
|
||||
func downloadFile(filePath string, fileUrl string) error {
|
||||
// 发送HTTP GET请求
|
||||
resp, err := http.Get(fileUrl)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// 获取文件名
|
||||
fileName := filepath.Base(filePath)
|
||||
fmt.Printf("Downloading: %s\n", fileName)
|
||||
|
||||
// 创建文件
|
||||
out, err := os.Create(filePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer out.Close()
|
||||
|
||||
// 获取文件大小
|
||||
totalSize := resp.ContentLength
|
||||
|
||||
// 创建进度条
|
||||
bar := progressbar.NewOptions64(
|
||||
totalSize,
|
||||
progressbar.OptionSetDescription("Progress"),
|
||||
progressbar.OptionSetWidth(30),
|
||||
progressbar.OptionShowBytes(true),
|
||||
progressbar.OptionShowCount(),
|
||||
progressbar.OptionSetTheme(progressbar.Theme{
|
||||
Saucer: "=",
|
||||
SaucerHead: ">",
|
||||
SaucerPadding: " ",
|
||||
BarStart: "[",
|
||||
BarEnd: "]",
|
||||
}),
|
||||
)
|
||||
|
||||
// 创建带进度条的writer
|
||||
writer := io.MultiWriter(out, bar)
|
||||
|
||||
// 将响应体复制到文件中并更新进度
|
||||
_, err = io.Copy(writer, resp.Body)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 确保进度条达到100%
|
||||
bar.Finish()
|
||||
fmt.Println() // 换行
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"alistControl/alist"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
client := alistsdk.NewClient("https://alist-home.s1f.ren", "kyou", "WFBDGnBfjjkVowen2", false, 200)
|
||||
user, err := client.Login()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(user)
|
||||
path := "/游戏/我的世界/常青藤Mods"
|
||||
list, err := client.List(path, "", 1, 100, false)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
// 获取当前文件夹下 modes 目录的的文件列表,判断是否存在,不存在则上传
|
||||
currentDir, err := os.Getwd()
|
||||
if err != nil {
|
||||
fmt.Println("无法获取当前工作目录:", err)
|
||||
return
|
||||
}
|
||||
// 构建mods文件夹的路径
|
||||
modsPath := currentDir + "/mods"
|
||||
// 读取mods文件夹中的所有文件和子目录
|
||||
files, err := os.ReadDir(modsPath)
|
||||
if err != nil {
|
||||
fmt.Println("无法读取mods文件夹:", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 打印所有文件和子目录的名称
|
||||
for _, file := range files {
|
||||
hasFile := false
|
||||
fileInfo, _ := file.Info()
|
||||
fileSize := fileInfo.Size()
|
||||
for _, alistFile := range list {
|
||||
if file.Name() == alistFile.Name && fileSize == alistFile.Size {
|
||||
fmt.Println("文件已存在")
|
||||
hasFile = true
|
||||
}
|
||||
}
|
||||
if !hasFile {
|
||||
fmt.Printf("%s文件不存在,开始上传\n", file.Name())
|
||||
// 获取mods文件夹中的文件路径
|
||||
filePath := modsPath + "/" + file.Name()
|
||||
client.PutUpload(filePath, path+"/"+file.Name(), false)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user