最近闲来无事, 于是就简单学习了下Go语言的基本的用法。由于实践才是最快的学习方法,
所以这里就以下载网络图片或文件入手来学习Go语言

文件下载到本地,通常的思路就是先获得网络文件的 输入流 以及本地文件的 输出流 ,再读取输入流到输出流中,因此自然也要获取相应的ReaderWriter

下面首先是使用GoLang的http.Get()方法(使用client的do方法原理类似)

 // 图片以花瓣网的图片为例imgUrl := "http://hbimg.b0.upaiyun.com/32f065b3afb3fb36b75a5cbc90051b1050e1e6b6e199-Ml6q9F_fw320"res, err := http.Get(imgUrl)if err != nil {fmt.Println("A error occurred!")return}// defer后的为延时操作,通常用来释放相关变量defer res.Body.Close()

然后获得get请求响应的reader对象

 // 获得get请求响应的reader对象reader := bufio.NewReaderSize(res.Body, 32 * 1024)

上面获取到了输入流的reader对象, 下面来获取本地文件的输出流的writer对象

 imgPath := "C:\\Users\\Asche\\go\\src\\GoSpiderTest\\"// 根据图片url获取其文件名fileName := path.Base(imgUrl)file, err := os.Create(imgPath + fileName)if err != nil {panic(err)}// 获得文件的writer对象writer := bufio.NewWriter(file)

好了, reader和writer对象都得到了,然后在读取写入。
如果嫌麻烦的话,可以直接copy:

 written, _ := io.Copy(writer, reader)// 输出文件字节大小fmt.Printf("Total length: %d", written)

或则手动读取和写入

 bytes := make([]byte, 32 * 1024)for {len, err := reader.Read(bytes)if len < 0 || err != nil{return}// 注意这里byte数组后的[0:len],不然可能会导致写入多余的数据_, _ = writer.Write(bytes[0:len])fmt.Printf("%d ", len)}

ok,下载完成。

下面贴上完整的代码(读取写入采用的方法一)


package mainimport ("bufio""fmt""io""net/http""os""path"
)func main() {imgPath := "C:\\Users\\Asche\\go\\src\\GoSpiderTest\\"imgUrl := "http://hbimg.b0.upaiyun.com/32f065b3afb3fb36b75a5cbc90051b1050e1e6b6e199-Ml6q9F_fw320"fileName := path.Base(imgUrl)res, err := http.Get(imgUrl)if err != nil {fmt.Println("A error occurred!")return}defer res.Body.Close()// 获得get请求响应的reader对象reader := bufio.NewReaderSize(res.Body, 32 * 1024)file, err := os.Create(imgPath + fileName)if err != nil {panic(err)}// 获得文件的writer对象writer := bufio.NewWriter(file)written, _ := io.Copy(writer, reader)fmt.Printf("Total length: %d", written)
}

Go语言下载网络图片或文件相关推荐

  1. Go语言下载网络图片

    每个编程语言中文件操作.字符串操作都是最基本的功能,需要熟练掌握应用. 下载网络图片,并将文件保存到本地路径,本文就介绍go语言中的一个实现示例. 实现思路: 函数定义中包含保存文件路径以及图片的ht ...

  2. python︱批量操作文件(os)、图片操作技巧(下载网络图片、skimage.io)

    文章目录 @[toc] . 一.遍历操作文件 1.文件名字获取 **注意,不能`import glob` ,不然就会报错:** 2.批量重命名文件os.rename 直接修改了上级目录,test2.t ...

  3. 51单片机基本刷屏测试实验_51LCD 51关于液晶屏的C语言程序以及HEX文件,主要实现基本功能刷屏显示文字图 ,希望能 SCM 单片机开发 249万源代码下载- www.pudn.com...

    文件名称: 51LCD下载  收藏√  [ 5  4  3  2  1 ] 所属分类: SCM 开发工具: C++ 文件大小: 101 KB 上传时间: 2016-01-09 下载次数: 0 提 供 ...

  4. img 光盘映像文件已损坏_系统封装||还在用MSDN下载Windows镜像文件?你out了,用这个就可以了...

    大家好,我是FreeRonin,今天要分享的是一Windows系统镜像文件下载工具,镜像文件格式是一个基于文件的磁盘镜像格式.所谓镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作 ...

  5. ASP.NET下载网络图片

    直接上干货: 目录 获取页面中的图片或者MP3文件路径 保存网路图片 保存网络文字 获取页面中的图片或者MP3文件路径 /// <summary>/// 获取网页中的图片路径list集合/ ...

  6. Android开发-下载网络图片并显示到本地

    Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...

  7. Python下载网络图片方法汇总与实现

    本文介绍下载python下载网络图片的方法,包括通过图片url直接下载.通过re/beautifulSoup解析html下载以及对动态网页的处理等. ​很多人学习python,不知道从何学起. 很多人 ...

  8. 使用php下载网络图片有哪些方法,php下载网络图片常用的三个方法总结

    下面来讲利用PHP下载网络图片常用的三个方法.当然,这三个方法都不是万能的,有时候会因为网络问题,或者网络图片的权限问题(大站一般都有防盗链)导致下载失败. 一起来看看吧,实际工作中经常用到. 方法一 ...

  9. 使用php下载网络图片有哪些方法,php下载网络图片常用的三个方法总结_后端开发...

    php文件锁产生的问题和解决方案(一个真实案例)_后端开发 一个真实案例想起自己之前犯过一个相关的错误.当时场景是这样的:有一个微信公众号项目,调用微信公众号的接口都需要access_token,它的 ...

最新文章

  1. 漫画:有趣的“帽子问题”
  2. python中module用法_Python学习之module用法
  3. SWT中调用Automation的方式
  4. 手机900e模式如何救_苹果手机如何将显示模式改为黑底白字?这个简单!只需4步...
  5. Python常用技巧了解一下?
  6. lombok(@Getter@Setter)
  7. 8086标志寄存器FLAG
  8. pymysql建表_Python数据库操作,针对pymysql 和 MYSQL数据库
  9. SQL Serve 查询所有可用的数据库语句
  10. 考研数学三考摆线吗_考研数学草稿纸发几张?可以多打几张准考证当草稿纸用吗?...
  11. 中兴B860AV2.1U,联通版本,强刷固件线刷包
  12. C语言----打家劫舍(leetcode三题汇总)
  13. VMVare 打不开磁盘xxx.vmdk
  14. C++学习笔记:实现向量类的加减赋值运算,重载运算符
  15. 通过canvas给图片添加水印
  16. require与import的区别和使用
  17. 图文手把手教程--ESP32 MQTT连接阿里云生活物联网平台
  18. Linux教程——安装Linux系统对硬件有什么要求?
  19. 软件工程与UML图的关系
  20. python读取sas数据集_SAS之DATA步运行机制

热门文章

  1. android app 设计,Android app 设计小结
  2. 阿里云联手PTC ThingWorx打造行业物联网生态
  3. 微软服务器开启锐速,[Windows] 锐速 serverSpeeder 开心版
  4. 9.03 Every Day English
  5. 华为手机怎么设置APP开机启动管理将自动管理修改成手动管理?
  6. Android应用将清除数据项变为管理空间,自定义数据清除
  7. flask 进阶:留言板
  8. Android悬浮窗看这篇就够了
  9. Python——第三天
  10. 基于SSM的校园闲置物品交换系统Java校园二手商城系统的设计与实现(源码调试+讲解+文档)