在Android和Node.js之间传输大文件

时间:2018-07-19 14:44:15

标签: android node.js react-native usb

我有一个照相的Android应用程序(用React Native编写,但是我可以添加本机模块),与用户计算机上的图库类型应用程序配对(用Electron with React编写)。照片的数量可能很大(我们一次拥有超过一千张照片),并且需要将它们传输,解压缩和取消裁剪到计算机应用程序中。我需要一种可靠的方法来执行此操作,而无需先通过Internet路由数据。

我尝试过的事情

Node USB :看起来很不错的库,但是如果不在用户计算机上安装驱动程序就无法使用。然后,驱动程序似乎将替换默认的Windows USB驱动程序,并且通过常规方法(在Windows中打开文件资源管理器)将无法访问手机。也许有某种方法可以“即时”切换驱动程序,仅在传输照片时使用驱动程序,然后在完成后再将其切换回系统驱动程序?

ADB这是我尝试过的原始解决方案,它确实满足了我的需要,但存在两个棘手的问题:首先,电话需要启用开发模式,还有两个,亚行似乎无法识别所有设备(例如,让它与LG V20配合使用时会遇到很多麻烦)。对于这个问题,理想的答案应该是没有这两个问题的亚行。

WiFi路由:我们将电话与主机连接到相同的WiFi网络,使用WebSockets通过Internet握手IP,然后通过WiFi网络启动直接连接。如果找不到其他解决方案,那可能就是我要寻求的解决方案。此选项的最大问题是所需的手动设置量相对较大。我们的用户在技术上并不总是很精明,并且我不知道假设他们的家中有WiFi是多么合理。无论如何,这不是转移的唯一选择。此外,通过无线网络传输千兆字节的照片会导致同一网络上每个人的速度变慢。

绑定路由:我们将电话绑定到计算机,并以与上述步骤相同的方式发起直接连接。这种方法的缺点是,只有具有SIM卡的电话才能激活网络共享(并非所有电话都具有SIM卡,因为连接并不是满足我们需求的主要目的),并且计算机上的所有其他流量现在都可以通过电话路由,这对于拥有SIM卡的客户的数据上限来说是不利的。此外,没有办法以编程方式打开网络共享,只能显示网络共享菜单。这不是一个太大的问题,但其他两个非常重要。

蓝牙:通常可以满足我的要求,但是数据传输速率太低,比WiFi低一个数量级。

WiFi Direct :我实际上没有尝试过,因为我找不到让PC接受WiFi Direct连接的可行方法。它保证了非凡的速度,但是我发现没有模块或库可以帮助我实现它。

SD卡:技术含量最低的方法,只需将所有内容保存到SD卡中,然后让客户端取出卡并将其插入计算机即可。除了需要SD卡端口(既不保证客户的计算机也不保证其电话)之外,这种做法还是可行的。

显而易见的:手动将所需文件从手机拖放到PC。这就是我们现在的工作方式,充满了问题。由于某种原因,在传输过程中,文本文件的最后15-20个字符被截断;由于MTP的已知问题并未迫使手机重新扫描媒体,设备上的许多照片最初并未显示。用户有时会将文件放在错误的位置,从而导致不必要的支持电话。此方法肯定需要替换。

两个月来,我一直在寻找解决这个问题的方法,很难相信没有人有这样的Android用例。很明显,Android和PC之间的USB通信是不平凡的,我敢肯定,有一些程序可以做到这一点,Windows就是从这里开始的。但是,请尝试一下,没有开箱即用的解决方案。以前有没有人处理过这样的问题?您有什么解决方案?您将如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

在Android上下载大文件时,建议使用Download Manager,它支持许多本地功能,例如进度条和通知,并且下载任务也将由OS处理,并且效率更高。

React Native Fetch Blob库支持此功能

答案 1 :(得分:0)

您实际上并不需要通过互联网路由数据。 您可以只通过Internet交换元数据: 使用文件夹导入功能扩展您的桌面应用程序(通常通过USB将手机插入手机,然后转到文件夹,然后导入)。 当您执行此过程时,让它通知Web服务某种形式(推送通知?不是手机应用开发者)。桌面应用从哪个设备(ID,文件名,...)和手机导入了哪些文件获取此元数据,并可以继续执行其所做的任何操作!

显然,最好的解决方案是通过USB的通信通道。直到您找出答案,您才能以这种方式临时实施!