背景
我们经常会有手机向电脑传文件 或者 电脑像手机传文件的需求。
而通常的解决方案是:手机上安装一个聊天软件(如微信),电脑上安装一个聊天软件,然后自己给自己传输,然后进行下载。
这种方式是很麻烦的:
- 需要手机和电脑上都安装相应的软件。
- 需要有一个网络环境。
- 需要先把文件上传到聊天软件的服务器,然后再从软件服务器进行下载。
为了尽可能的避免这种没必要的麻烦,于是就做了这个工具,简简单单 上传下载。
选型
做这种工具其实很好做,就是做一个 Server 支持上传下载在能力就可以了。
这里选择了用 PHP,而没有选择用 NodeJS,主要原因如下:
- NodeJS 虽然方便,但在一个全新的电脑上,除了需要安装环境之外,还需要安装依赖,而国内对 npm 的访问速度并不快,各种解决方案只会增加用户对于这个工具的使用成本。
- PHP 目前像 MacOS 是默认支持 PHP 环境的,可以直接使用。即便需要安装环境,也是十分快的,且不用安装依赖。
- PHP 5.4 已经支持内置的 Web Server 了,所以开启一个 Server 十分简单。
开发
PHP Server 命令:
php [options] -S <addr>:<port> [-t docroot] [router]
直接在当前目录下,执行上面的命令就可以了。
PHP 默认对上传的大小和数量进行了限制,而这些修改只能通过 php.ini 文件进行修改,而 php 命令是支持指定 php.ini 的位置的。
-c <path>|<file> Look for php.ini file in this directory
所以我们可以直接在项目目录下放置 php.ini 文件进行配置,并通过指定的方式进行执行:
php -c ./ -S 地址:端口
php.ini 需要需改的地址,可参考(链接):
upload_max_filesize = 0
max_file_uploads = 1000 ; 最大上传数量,1000应该够了
memory_limit = -1
post_max_size = 0
max_execution_time = 0
max_input_time = -1
效果
效果如下。
执行
php -c ./ -S localhost:8000
输出:
$ php -c ./ -S localhost:8000
PHP 7.3.24-(to be removed in future macOS) Development Server started at Wed Apr 14 13:49:57 2021
Listening on http://localhost:8000
Document root is /Users/lecepin/multi-file-upload
Press Ctrl-C to quit.
点击 Listening on 后面的地址 http://localhost:8000 即可访问。
注意:因为手机访问需要用的电脑中的局域网地址,所以访问上面命令生成后的地址,会对 IP 进行校验,如果不是局域网的,则会生成一个准确的命令,再执行一次即可,如下图所示:
上传
正常启动后,界面如下所示:
手机和电脑在同一网络的情况下,直接扫码即可访问。
上传后,会进行相应状态提示,如下图所示:
下载
如果想进行上传文件的下载,可以点击 已上传 链接进行访问,如下图所示:
对于需要提供给手机端进行下载的文件,也可以直接放到 Upload 目录中,会在 已下载 页面呈现。
Upload 文件夹会在上传文件操作中自动创建。
代码详情访问 Github multi-file-upload 。