这是fly的第四篇篇文章,帮助您在微信小程序中使用fly。在阅读本文之前,如果您还不了解 fly。 请先阅读前两篇文章:
第一篇: JS HTTP 请求终极解决方案 - fly.js
第二篇: Fly vs axios
第三篇:微信小程序中使用Fly 发起http请求fly gibhub地址:github.com/wendux/fly
Fly 同时支持浏览器环境和 node 环境,在 node 下,由于没有浏览器沙箱的限制,有访问文件系统的能力,为此fly 针对 node,专门做了功能提升,主要添加了文件下载和上传的便捷方法。
本文档所列 API 为 Fly 默认自带的的 node adapter 支持,如果是您使用了其它第三方实现的 adapter,则不能保证这些 api 能正常工作。
Node adapter 使用了 request 库,向作者致谢。
- download (url, savePath, params = null, options={})
url 为下载地址,savePath为下载成功后文件保存的路径,params 为请求参数,默认为null。返回一个
对象,一个简单的示例如下:
- Promise
- var fly=require("flyio")
- var log=console.log
- //文件下载
- fly.download("http://localhost:8089/static/v.png", "./v.png")
- .then(d => {
- log(d.size)
- })
- .catch(log)
下载一张图片,保存到当前文件夹。成功后then收到的数据结构为:
- {
- size:3000,//文件大小,单位字节
- path:"/user/wendux/xx/v.png" //下载文件保存在本地的绝对路径
- }
options
options 为请求配置,您可以设置自定义header等。详情请参见 请求配置 。
Fly下载文件的原理是将选项
设为“stream”,然后fly在接收数据时就会将响应流传递给上层,然后再读取、保存,所以我们也可以用如下方式达到同样的效果:
- responseType
- fly.get("http://localhost:8089/static/v.png",null,{responseType:"stream"})
- .then(d=>{
- //d.data为buffer对象
- fs.writeFile("v.png", d.data,(err)=>{
- //错误处理
- })
- })
- upload(url,formData,options={})
formData是一个对象,和浏览器中
相似。既可以包括普通字段,也可以包括文件。
- FormData
- var fly = require("flyio")
- //上传单个文件
- var formData = {
- file: fs.createReadStream('./v.png'),
- //文件
- }
- fly.upload("http://localhost/upload", formData).then(log).
- catch(log)
- //可以包括多个字段/文件
- var formData = {
- name: "v.png",
- //普通的字段
- avatar: fs.createReadStream('./v.png'),
- //文件
- resume: fs.createReadStream('./resume.docx'),
- //文件
- attachments: [ //可以通过数组
- fs.createReadStream('./file1.zip'), fs.createReadStream('./file2.zip')]
- }
- fly.upload("http://localhost/upload", formData).then(log).
- catch(log)
upload会将请求的
设为 “multipart/form-data”。
- content-type
⚠️ 大多数http服务器对单次请求上传文件的大小都有限制,不建议在一次请求中上传多个文件。
options
options 为请求配置,您可以设置自定义header等。详情请参见 请求配置 。
使用 Fly 的好处是封装了request 库,提供了和浏览器端一致的
接口。如果你想直接使用 request 库原生的 api,可以通过
- Promise
直接调用,
- fly.$http
就是一个request对象,如:
- $http
- //Stream
- fly.$http('http://google.com/doodle.png')
- .pipe(fs.createWriteStream('doodle.png'))
- //post请求
- fly.$http.post('http://service.com/upload', {form:{key:'value'}})
详细的文档请移步 Github request 。
Node下创建新实例时,要引用
:
- src/node/index.js
- var Fly= require("./src/node")
- var newFly=new Fly;
再次贴出fly github地址,如果你喜欢,欢迎star,以使更多的人知道fly,感谢您的支持:github.com/wendux/fly
来源: https://juejin.im/post/59f6ec44f265da43252895be