type Downloader struct { common.FileMetadata // 文件元数据 common.SliceSeq // 需要重传的序号 waitGoroutine sync.WaitGroup // 同步goroutine DownloadDir string // 下载文件保存目录 RetryChannel chan int // 重传channel通道 MaxGtChannel chan struct{} // 限制上传的goroutine的数量通道 StartTime int64 // 下载开始时间 } // DownloadFile 单个文件的下载 func DownloadFile(filename string, downloadDir string) (error){ if !common.IsDir(downloadDir) { fmt.Printf("指定下载路径:%s 不存在\n", downloadDir) return errors.New("指定下载路径不存在") } targetUrl := common.BaseUrl + "download?filename=" + filename req, _ := http.NewRequest("GET", targetUrl, nil) resp, err := (&http.Client{}).Do(req) if err != nil { fmt.Println(err) return err } defer resp.Body.Close() filePath := path.Join(downloadDir, filename) f, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { fmt.Printf(err.Error()) return err } defer f.Close() _, err = io.Copy(f, resp.Body) if err != nil { return err } fmt.Printf("%s 文件下载成功,保存路径:%s\n", filename, filePath) return nil }
时间: 2024-04-18 16:31:37 浏览: 152
这段代码是一个 Downloader 结构体和一个 DownloadFile 函数。结构体中包含了文件元数据、需要重传的序号、等待 goroutine 的同步组、下载文件保存目录、重传通道和限制上传 goroutine 数量的通道等字段。DownloadFile 函数是用来下载单个文件的,它会发送一个 GET 请求获取文件内容,并将内容保存到指定的下载目录中。如果下载路径不存在或者下载过程中出现错误,函数会返回相应的错误信息。最后,函数会打印出文件下载成功的消息。
阅读全文