很多人在日常使用中会使用不只一个平台的设备。例如对我来说,我会使用mac进行论文撰写等工作,使用iPhone和iPad作为日常的通信,娱乐和论文查看,而使用pc来进行工业制造软件的使用。这样就导致了日常使用中跨平台剪切黏贴和文件传输的一点障碍。参照了apple的airdrop系统,我基于GitHub由其他人已经达成的成果,进行了一点改造。
该功能的实现方法非常简单,通过跨平台通用的http serves来进行文件的发布与传输,并使用鉴权代码生成哈希值进行设备之间文件传输的授权校验。
首先,需要使用开源的clipboard-online软件。clipboard-online 是一款 Windows 平台应用,它将本机剪贴板暴露于 HTTP 端口,其他设备通过发送 HTTP 请求来获取、发送剪贴板。而其他设备发送剪贴板后,PC 可以直接粘贴。现已支持文本、文件、图像。
该软件在GitHub平台上已经提供了两个快捷指令案例,用于实现ios平台与pc之间的数据传输。
该功能已经实现了apple平台和pc之间剪贴板的共享。但是对其进行分析后发现目前如果是将剪贴板中的文件通过该方法进行共享,黏贴的文件的文件名将会是数据的前几十位的编码,不利于使用者进行文件的查找与确认。因此在其的基础上,我对该快捷指令进行了一些改造。以下是运行原理。
从mac/ios共享到Windows
1.首先,自动判断你输入的数据。查看你是否有选择任何文件,如果有,则将该文件作为要发送的数据,否则,则启动剪贴板共享模式,将剪贴板中的数据作为要发送的数据。
2.基于当前日期和你设置的鉴权代码生成哈希值,用于生成数据发送权限令牌。
3.获取你当前网络的名称,在之前储存的数据查找Windows主机的IP地址,从而确认在当前网络环境下要连接的主机。
4.获取要发送的数据的数据类型,如果数据是数据是纯文本则将其作为文本直接通过http serves进行发送,如果数据是图像,媒体或其他文件,则将数据通过base64编码后进行发送。
5.基于格式生成要发送的数据,按照之前设置的主机地址和鉴权代码进行编码和发送。
发送到Windows的数据将会被保存到Windows的剪贴板中,你可以直接在Windows上按压粘贴进行文件保存。
从Windows黏贴到mac/ios
1.在Windows上将你想要发送的文件选中并复制到剪贴板。
2.同样,使用和共享相同的方式生成鉴权令牌和确定主机地址,进行文件的获取的准备。
3.从http serves中获取数据,根据共享时http serves生成的字典中的数据获取共享过来的数据类型。如果类型时纯文本,则将其直接复制到剪贴板中等待黏贴。如果类型是文件,则使用base64来对发送过来的数据进行解码,获得原文件数据。
- 此时,如果我们希望在Windows上将一个文件共享到mac上,我们获取的原文件其实已经可以被保存到剪贴板中等待粘贴到mac和ios中的。但此时数据的名称是乱码的,同时在ios的中进行文件的粘贴与复制管理是一项不太容易的工作。因此我们要实现文件的重新命名和文件的自动保存。
首先,判断设备的类型,如果设备为mac,从发送过来的数据的字典中定位到该文件的在Windows中时的原始名称,将其重新赋予temp文件,最终将其保存到桌面(可以自定义为任意位置)和剪贴板中。
若设备不是mac而是ios设备,则在将temp文件重命名后进行二次判断。如果文件是图像,则将其保存到相册并拷贝到剪贴板。如果文件是其他格式的文件,则将其保存到ios设备文件应用中本地存储下的获取文件夹中(可以自定义为其他位置)。
使用前设置:
Windows:从GitHub主页https://github.com/YanxinTang/clipboard-online上下载clipboard-online软件,以管理员权限双击会自动在后天低功耗工作。该软件没有主界面,只在任务栏中显示图标,右键点击后会显示开机启动和退出两个选项。可以勾选开机启动让它在你的电脑开机时自动部署。
双击软件开机后在之前软件存在的目录中会出现几个文件,为服务运行时的日志,缓存和设置文件。双击config。Json文件,使用记事本将其打开,内容如下:
{
“port”: “8086”,
“authkey”: "",
“authkeyExpiredTimeout”: 30,
“logLevel”: “warning”,
“tempDir”: “./temp”,
“reserveHistory”: false,
“notify”: {
“copy”: false,
“paste”: false
}
}
其余内容可以不用修改,但需注意port和authkey两个内容。Port需要注意不要与你其他的软件相互冲突,例如bt。Authkey则是你的鉴权代码,之后在mac和ios端上设置时需要保持一致。
修改完后保存config,退出并重新启动clipboard-online软件。
Mac端:
两个快捷指令的安装:
共享
https://www.icloud.com/shortcuts/d19650718f0647a19511c1f7482d8f2f
获取
https://www.icloud.com/shortcuts/02cd4f0bc96649d5ba809357f67cee25
选择编辑共享或获取中任意一个快捷指令,进入编辑模式。翻到最上面,内容如下:
修改词典内容:
SSID:你的mac连接的wifi服务名称
值:在对应的wifi服务名称下的Windows主机ip地址,请在Windows端使用ipconfig命令从cmd中获取。
该设置允许你将多个网络环境的网络配置保存并自动切换。例如在家中的wifi名称为home,家中window主机的ip地址为192.168.31.2。在公司中的wifi名称为work,公司中window主机的ip地址为192.168.1.3。将上述内容保存到字典后,在你的MacBook连接到对应的wifi后,快捷指令会自动连接到对应的主机,省去频繁设置网络的操作。
修改文本:
该文本框中设置鉴权代码,和Windows中设置保持一致。
修改数值:
该数值为你的通信端口,和Windows中设置保持一致。
该设置在共享和获取两个快捷指令中设置一致。
对于mac机器,可以在之后的详细信息设置中勾选如下设置并制定快捷键,实现更加快捷的操作。
共享中设置如下:
获取中设置如下:
iOS端:
ios端中的设置与mac中设置基本相同,如果你有开始iCloud的快捷指令自动同步,那么mac上的设置会自动同步到ios中。
Ios中需哟对共享表单进行进一步设置。进入相册,选择任意一张图片,点击共享,翻到最下方,点击编辑操作。在“其他操作”中找到共享和获取两个操作,点击左侧绿色加号,将其添加到个人收藏中。
使用方法:
Windows到mac/Ios
- 在Windows上选择要共享到文件并ctrl+c
- 在mac上点击快捷键control+v或在上方状态栏中点击获取快捷指令。文件自动被保存到macos制定目录。如果是纯文本,则会自动被保存到剪贴板中,之后可以使用command+v将其黏贴到任意位置。
- 对于ios,在相册或文件中点击共享后点击获取,就能将文件从Windows中传输到ios设备上的相册或文件应用中。如果是纯文本,可以在编辑界面点击光标,在出现的快捷栏中选择共享后再选择获取,就能将在Windows中复制的文本保存到ios到剪贴板中。
之后按压虚拟键盘上左上角的粘贴进行黏贴。
Mac/ios到Windows
- 在mac上选择要共享的文件/文本,先按压command+c将其复制到剪贴板,再按压control+c或在上方状态栏中点击共享快捷指令将其发送到winnows主机。
在mac也可以选择要共享的文件,右键打开菜单,选择共享后选择快捷指令,然后双击共享将其发送到winnows主机。但该方法由于macos的文件管理问题,无法将macos端文件的文件名也一并复制到Windows端,Windows端文件名会被重命名为文件类型。
- 对于ios,在相册或文件中点击共享后点击共享,就能将文件从ios中传输到Windows的剪贴吧中。如果是纯文本,可以在编辑界面点击光标,在出现的快捷栏中选择共享,就能将在ios中选择的文本共享到Windows的剪贴板中。
- 在Windows你想要保存文件/文本的位置按压ctrl+v