提交 33444fd9 作者: 方治民

feat: 新增 maptiler 资源缓存

上级 9a00289b
const fs = require('fs')
const path = require('path')
const https = require('https')
function downloadFile(url, filepath) {
if (!fs.existsSync(filepath)) {
fs.mkdirSync(path.dirname(filepath), { recursive: true })
}
return new Promise((resolve, reject) => {
//忽略证书认证
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0
try {
https.get(
url,
{
headers: {
'User-Agent':
'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/102.0.5005.124'
}
},
res => {
if (res.statusCode === 200) {
//使用数据流写入
const file = fs.createWriteStream(filepath)
file.on('finish', () => {
file.close()
resolve()
})
file.on('error', reject)
res.pipe(file)
} else {
res.resume()
console.log(`Request Failed With a Status Code: ${res.statusCode}`)
reject()
}
}
)
} catch (err) {
console.log(err)
reject()
}
})
}
module.exports.proxy = async (req, res, next) => {
const { id, x, y, z, key = '6Ray8MH3R31aT2AbOWXy', v = 'DEFAULE' } = req.params
const uri = `https://api.maptiler.com/tiles/${id}/${z}/${x}/${y}?key=${key}`
const src = path.resolve(`./data/cache/maptiler/${v}/${id}/${z}/${x}/${y}`)
try {
if (!fs.existsSync(src)) {
await downloadFile(uri, src)
}
} catch (_) {
try {
if (fs.existsSync(src)) {
fs.rmSync(src)
}
} catch (__) {}
}
res.sendFile(src, err => {
if (err) return next(err)
})
}
const router = require('express').Router()
const maptiler = require('./controller')
// "https://api.maptiler.com/tiles/v4/{z}/{x}/{y}.pbf?key=6Ray8MH3R31aT2AbOWXy"
// "https://api.maptiler.com/tiles/satellite-v2/{z}/{x}/{y}.jpg?key=6Ray8MH3R31aT2AbOWXy"
router.get('/maptiler/tiles/:id/:z/:y/:x', maptiler.proxy)
module.exports = router
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论