前言
电脑和手机间如何进行文件传输?通过数据线连接电脑和手机?通过登录第三方App(QQ、微信)发送?
上面两种方式是我常用的方式,想必你们也差不多。曾经在CSDN看到过一篇文章,关于局域网传输的,所谓的局域网传输,即是在局限于一定地理范围内的计算机和设备之间,通过一些共享的物理媒介(例如以太网线或Wi-Fi无线信号),进行数据传输和通信。
这篇文章的局域网传输是用Python实现的,我对Python不太熟,所以仅仅对开源代码作了一些简单的修改和打包,下面即是打包后运行的成品:
在pc端的某一个文件夹下运行打包后的程序即可共享该文件夹下的所有文件
通过浏览器即可进行访问和下载:
不过终究还是有局限性的,只能够单方面传输,只可以将电脑的文件传输到手机。
查看python的部分实现代码
从上面可以了解到这个实现原理是:
开启服务后,将电脑作为服务器,然后所有的访问端作为客户端,客户端就可以对服务器进行数据读取操作,这样就实现了只要处于同一局域网就可以进行文件跨设备跨平台传输,当然,其实不处于局域网也可以,只是要进行内网穿透,有点麻烦,不过也没那个必要!
最近开发东西一直要用到文件传输,涉及到手机电脑文件互传,这个单方的传输不太够用了,想改进一下吧,Python又没有过于深入地学习,那就没办法了,只好用熟悉的Nodejs进行实现,百度一下想白嫖下别人的源码,发现并没有找到想要的,网上的是使用socket实现的,我想通过搞成不使用socket(因为我不会)的Http文件服务器实现,那就只能自己搞了~
开发思路
- 首先创建一个HTTP服务器,并监听指定的端口号和IP地址。
- 当收到客户端的请求时,根据请求的URL进行相应的处理。
- 如果请求的是根目录"/",则默认上传或者下载的路径为"/sdcard",即手机的存储目录。
- 如果请求的是文件上传接口"/upload",则使用formidable模块解析上传的文件,并将文件保存到指定的上传路径中。同时也会监听formidable的progress事件,获取上传进度并实时输出在客户端的控制台。
- 如果请求的是跳转到某个目录的接口"/goto",则通过formidable模块解析POST数据,并设置重定向响应头Location。
- 如果请求的是文件下载,则根据请求的URL读取对应的文件,并通过流式传输的方式将文件内容返回给客户端。
- 如果请求的是文件夹,则列出该文件夹下的所有文件及子文件夹,并生成HTML页面返回给客户端。
- 服务器启动后会输出服务器IP地址及端口号等信息供客户端访问,为了方便客户端使用,我指定端口号为1314。
- 在HTML页面中,客户端可以点击链接进入子文件夹或下载文件;上传文件时可选择上传路径;快速跳转到指定目录等功能都是可以通过前端页面输入交互完成。
- 为了更加方便和人性化,进入二级目录会出现返回上一级目录的点击链接。默认展开二级目录,且根据日期逆序排序。
效果演示
待上传。
下载方式
点我跳转下载 (密码:h2t8)