作为测试,开发给一个apk包,不想用新手机登录QQ、微信传送文件,也不想手机连接数据线线,就想直接扫码下载。
连apk上传到蒲公英,都不想,还要蒲公英账号。
所以,自己搭一个文件扫码下载的,就可以了。
nodejs跑服务demo,代码最少了,只有5行就可以启动服务了
本机已安装:npm + nodejs + python3
只用几个文件,就可以实现了。
1、新建一个目录,目录下面有文件index.html、getfile.py、make.js、run.bat(双击就运行) + 要下载的文件
-index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src='https://cdn.staticfile.org/jquery/2.0.3/jquery.min.js'>
</script>
<style>
li {
height: 85px;
width: 50%;
background-color: powderblue;
}
</style>
</head>
<body>
<p>自动加载的本地目录,点击你要下载的文件</p>
<p>扫描二维码进入此下载页面</p>
<img id = "img" src='/api/img'/>
<p id="hidderId">
</body>
<script type="text/javascript">
$.get("/api/allFiles",function(data){
console.log(data.anArray)
for(var i=0;i < data.anArray.length; i++){
li_a = "<li><a href='//www.greatytc.com/api/download?file=" + data["anArray"][i] + "'>" + data["anArray"][i] + "</a></li>"
$("#hidderId").append(li_a)
}
});
</script>
</html>
-getfile.py
import os
out_str = ""
for file in os.listdir(os.getcwd()):
if os.path.isdir(file):
continue
out_str += "#" + file
print(out_str)
-make.js
const http = require('http')
const fs = require('fs')
const path = require('path')
const exec = require('child_process').exec;
const url3 = require("url");
var qr = require('qr-image')
const opn = require('opn');
// 没有的模块,要npm install 安装
var port = 3000
// 修改为自动电脑ip
var host = "192.168.4.3"
const app = http.createServer((req, res)=>{
const { method, url} = req
if (method === 'GET' && url === '/'){
// 读取文件
fs.readFile(path.resolve(__dirname, 'index.html'), (err, data)=>{
if (err){
throw err
}
res.setHeader('Content-Type', 'text/html')
res.end(data)
})
}
else if (method === 'GET' && url === '/api/img'){
console.log("二维吗:")
// 返回二维码
var img = qr.image(host + ":" + port,{size :10});
res.writeHead(200, {'Content-Type': 'image/png'});
img.pipe(res);
}
else if (method === 'GET' && url.includes('/api/download')){
var query = url3.parse(url).query;
console.log("读取参数:" + query)
var fomrmat_lst = query.toString().split('=')
var req_file_name = "None"
req_file_name = fomrmat_lst[1]
console.log("读取的文件:" + req_file_name)
// 读取文件
fs.readFile(path.resolve(__dirname, req_file_name), (err, data)=>{
if (err){
throw err
}
res.setHeader('Content-Type', 'application/*')
dis_str = 'attachment; filename=' + req_file_name
res.setHeader('Content-Disposition', dis_str)
res.end(data)
})
}else if (method === 'GET' && url === '/api/allFiles'){
// 返回目录下面所有文件
exec('python getfile.py',function(error,stdout,stderr){
if(stdout.length >1){
console.log('python 输出:',stdout);
var fomrmat_lst = stdout.toString().split('#')
res.setHeader('Content-Type', 'application/json')
//const fileName = encodeURI('app-release.apk')
var json = JSON.stringify({
anArray: fomrmat_lst,
});
res.end(json)
} else {
console.log('you don\'t offer args');
}
if(error) {
console.info('stderr : '+stderr);
}
})
}
console.log("到头了:" + req.url)
});
app.listen(port, ()=>{
console.log('监听3000端口...')
// 默认浏览器打开地址
opn('http://' + host + ":" + port);
})
-run.bat
cd /d C:\Users\admin\Desktop\本地nodejs_文件下载
node make.js
pause