当前位置: 首页 > news >正文

企业网站营销典型案例网站页脚

企业网站营销典型案例,网站页脚,外贸跨境电商平台有哪些,wordpress模拟装机文章目录 前言流程图主函数下载文件初始化分片下载worker分发下载任务获取下载文件的大小下载文件分片错误重试项目演示最后 前言 你好#xff0c;我是醉墨居士#xff0c;最近在开发文件传输相关的项目#xff0c;然后顺手写了一个多协程文件下载器#xff0c;代码非常精… 文章目录 前言流程图主函数下载文件初始化分片下载worker分发下载任务获取下载文件的大小下载文件分片错误重试项目演示最后 前言 你好我是醉墨居士最近在开发文件传输相关的项目然后顺手写了一个多协程文件下载器代码非常精简核心代码只有100行左右适合分享给大家学习使用 流程图 主函数 func main() {fileURL : flag.String(u, , downloade url of the file)flag.Parse()if *fileURL {log.Println(Please input a download url)flag.Usage()return}fileDir, err : os.Getwd()if err ! nil {log.Println(err)return}// 下载文件保存路径filePath : filepath.Join(fileDir, filepath.Base(*fileURL))err downloadFile(*fileURL, filePath)if err ! nil {log.Println(err)return}log.Println(download file success:, filePath) }下载文件 // 下载文件 func downloadFile(fileURL string, filePath string) error {log.Println(downloading file:, fileURL, to, filePath)taskCh : make(chan [2]int64, runtime.NumCPU())wg : new(sync.WaitGroup)// 创建执行下载任务的 workererr : initWorker(fileURL, filePath, taskCh, wg)if err ! nil {return fmt.Errorf(init worker failed: %v, err)}// 分发下载任务err dispatchTask(fileURL, taskCh)if err ! nil {return fmt.Errorf(dispacth task failed: %v, err)}// 等待所有下载任务完成wg.Wait()return nil }初始化分片下载worker // 初始化 下载 worker func initWorker(url string, filePath string, taskCh chan [2]int64, wg *sync.WaitGroup) error {for i : 0; i runtime.NumCPU(); i {// 打开文件句柄file, err : os.OpenFile(filePath, os.O_CREATE|os.O_RDWR, 0644)if err ! nil {return err}wg.Add(1)go func(file *os.File, taskCh chan [2]int64) {defer wg.Done()defer file.Close()// 循环从 taskCh 中获取下载任务并下载for part : range taskCh {log.Printf(downloading part, start offset: %d, end offset: %d, part[0], part[1])// 重试下载最大重试次数为 10 次每次下载失败后等待 1 秒err : retryWithWaitTime(10, func() error {return downloadPart(url, file, part[0], part[1])}, time.Second)if err ! nil {log.Printf(download part %d failed: %v, part, err)}}}(file, taskCh)}return nil }分发下载任务 // 分发下载任务 func dispatchTask(url string, taskCh chan [2]int64) error {defer close(taskCh)fileSize, err : getFileSize(url)if err ! nil {return err}// 分片大小 1MBconst chunkSize 1024 * 1024parts : fileSize / chunkSizelog.Println(file size:, fileSize, parts:, parts, chunk size:, chunkSize)for i : int64(0); i parts; i {// 计算分片的起始和结束位置startOffset : i * chunkSizeendOffset : startOffset chunkSize - 1// 发送下载任务taskCh - [2]int64{startOffset, endOffset}}// 发送最后一个分片的下载任务if fileSize % chunkSize ! 0 {taskCh - [2]int64{parts * chunkSize, fileSize - 1}}return nil }获取下载文件的大小 // 获取文件大小 func getFileSize(url string) (int64, error) {resp, err : http.Head(url)if err ! nil {return 0, err}defer resp.Body.Close()return resp.ContentLength, nil }下载文件分片 // 下载文件分片 func downloadPart(url string, file *os.File, startPos, endPos int64) error {req, err : http.NewRequest(GET, url, nil)if err ! nil {return err}// 设置文件分片区间的请求头req.Header.Set(Range, fmt.Sprintf(bytes%d-%d, startPos, endPos))resp, err : http.DefaultTransport.RoundTrip(req)if err ! nil {return err}defer resp.Body.Close()// 如果服务器返回的状态码不是 206 Partial Content则说明下载失败if resp.StatusCode ! http.StatusPartialContent {data, err : io.ReadAll(resp.Body)if err ! nil {return err}log.Println(unexpected data:, string(data))return fmt.Errorf(unexpected status code: %d, resp.StatusCode)}// 文件指针移动到分片的起始位置_, err file.Seek(startPos, 0)if err ! nil {return err}// 写入分片数据到文件_, err io.Copy(file, resp.Body)if err ! nil {return err}return nil }错误重试 // 重试函数 func retryWithWaitTime(retryCount int, fn func() error, waitTime time.Duration) error {var err errorfor i : 0; i retryCount; i {e : fn()if e ! nil {errors.Join(err, e)time.Sleep(waitTime)continue}return nil}return err }项目演示 最后 我是醉墨居士如果这个项目对你有所帮助希望你能多多支持我们下期再见
http://www.w-s-a.com/news/602906/

相关文章:

  • 南宁企业网站建设制作芜湖网站建设推广
  • 泉州市建设局网站公示深圳建站公司好坏
  • 如何搭建网站教程一个人制作网站
  • 网站开发专业都有哪些课程广州安全教育平台账号找回
  • 网站调整方案适合平面设计师的网站
  • 免费服务器建立网站用html5做的旅游网站代码
  • 学校英语网站栏目名称WordPress禁用邮件注册
  • 手机qq网页版网站沧州手机网站开发
  • 深圳罗湖网站设计公司建设的网站属于无形资产吗
  • 网站开发python西安网站建站品牌
  • 网站开发商标属于哪一类做网站还有钱赚吗
  • 做设计的搜素材上什么网站好设计公司画册设计哪家好
  • 视频网站开发需要什么语言做ui设计一年后年薪多少
  • 网站服务器维护费用统一企业官方网站
  • 网站如何调用手机淘宝做淘宝客呼和浩特网站运营公司
  • 做推广可以上那些网站网页游戏排行榜2014前十名
  • 国外网站备案流程企业网站 流程
  • 重庆网站建设letide童程童美少儿收费价目表
  • 苏州建站仿站东莞排名推广
  • 大中小网站的区分wordpress个人主页主题
  • 商务网站建设的可行性分析包括小程序源码网免费
  • 永州网站建设收费标准重庆网站建设公司夹夹虫专业
  • python做网站多少钱wordpress 2.8
  • 深圳网站平台网站开发工作程序怎么写
  • 自己可以接单做网站吗wordpress 添加自定义按钮
  • 网站首页权重宣传页制作
  • 智能网站建设软件有哪些方面网页的建设
  • 石铜路网站建设生鲜电商网站开发
  • 怎么提高网站加载速度慢网站的轮播怎么做的
  • 网络网站推广优化建筑工程教育网官方网站