Fly 同時支持瀏覽器環(huán)境和 node 環(huán)境,在 node 下,由于沒有瀏覽器沙箱的限制,有訪問文件系統(tǒng)的能力,為此fly 針對 node,專門做了功能提升,主要添加了文件下載和上傳的便捷方法。
本文檔所列 API 為 Fly 默認自帶的的 node adapter 支持,如果是您使用了其它第三方實現(xiàn)的 adapter,則不能保證這些 api 能正常工作。
Node adapter 使用了 request 庫,向作者致謝。
文件下載
download (url, savePath, params = null, options={})
url 為下載地址,savePath為下載成功后文件保存的路徑,params 為請求參數(shù),默認為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)
下載一張圖片,保存到當(dāng)前文件夾。成功后then收到的數(shù)據(jù)結(jié)構(gòu)為:
{
size:3000,//文件大小,單位字節(jié)
path:"/user/wendux/xx/v.png" //下載文件保存在本地的絕對路徑
}
options
options 為請求配置,您可以設(shè)置自定義header等。詳情請參見
an example 請求配置 。
底層
Fly下載文件的原理是將選項 responseType 設(shè)為“stream”,然后fly在接收數(shù)據(jù)時就會將響應(yīng)流傳遞給上層,然后再讀取、保存,所以我們也可以用如下方式達到同樣的效果:
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:[ //可以通過數(shù)組
fs.createReadStream('./file1.zip'),
fs.createReadStream('./file2.zip')
]
}
fly.upload("http://localhost/upload", formData)
.then(log).catch(log)
upload會將請求的 content-type 設(shè)為 “multipart/form-data”。
大多數(shù)http服務(wù)器對單次請求上傳文件的大小都有限制,不建議在一次請求中上傳多個文件。
options
options 為請求配置,您可以設(shè)置自定義header等。詳情請參見
請求配置 。
$http
使用 Fly 的好處是封裝了request 庫,提供了和瀏覽器端一致的 Promise 接口。如果你想直接使用 request 庫原生的 api,可以通過 fly.$http 直接調(diào)用,$http 就是一個request對象,如:
//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 。
創(chuàng)建新實例
Node下創(chuàng)建新實例時,要引用 src/node/index.js:
var Fly= require("./src/node")
var newFly=new Fly;