首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

还在用数据线从电脑传文件到手机?局域网传输快人一步

  • 25-04-23 10:01
  • 2483
  • 10937
juejin.cn

前言

最近在追美剧纸牌屋,找到的资源都很高清,一集的大小就到了3-4个G。因为主包的手机USB接口还是2.1(这里提一嘴,REDMI K80 Pro居然还是2.1),导致传输速度很慢。

想了想,有什么办法能够快速的从电脑传输文件到手机呢?看了一下Github交友网站上的项目,大多数都得在电脑和手机上安装软件,才能进行文件的传输。然后我又转头一看,我右手边的路由器。心中一想,能不能在局域网下,用HTTP进行文件的下载呢?

如果使用HTTP的话就需要电脑部署一个服务器,用于文件的下载。手机的话就比较简单了,只需要一个浏览器就可以了,理论都有了,就差实践了。要先看看局域网下,手机和电脑之间的带宽有多大,不然要是比电脑传输的速度还慢就没有弄的必要了。

搭了一个简单的服务器,看内网中下载能否跑满带宽,经过实验发现1G文件下载耗时8秒,相较于电脑的传输速度已经是相当快的了。

数据线:40MB/s局域网HTTP:150-300MB/s

对比下来,还是通过网络(局域网)传输比较快。理论成立,实际运行也成立,那就开干!

服务器

仓库地址:github.com/AzirZsk/Fil…

简单的一个文件下载服务器,只需要将文件字节流传输到手机上就可以了。

两个接口:

  • 查询目录下文件
  • 下载文件

这两个接口的实现都很简单就不展开说了,但是下载文件这个接口用到的技术还是要展开聊聊的。

范围下载

当网络异常时等因素导致下载断开时,通常来说是需要整个文件重新下载的,但是经过我DeepSeek后,发现HTTP有一个Range Requests规范。这个规范的重点在与要求文件服务器根据请求头中的设置,返回文件的部分字节。比如一个视频文件,我(客户端)可以指定服务器只返回49999-58794之间的字节。

这样的功能有啥好处呢?

  1. 断点续传,我找这个功能就是为了避免文件下载到一半的时候出错还要重新下载的。
  2. 支持文件的分块下载,也就是客户端能多线程同时下载一个文件,提高下载速度。

实现:

这个规范有几个头部信息需要处理(只挑重要以及关键的实现)

类型名称示例值说明
请求头Rangebytes=0-124124本次要下载第0个字节到124124字节
响应头Accept-Rangesbytes表示请求支持范围下载
响应头Content-Range12324-231512/46234524本次请求响应的是文件的12324字节到231512字节,文件总共有46234524字节

实现的代码对应Github中的FileService.rangeDownload方法,我就不大篇幅的在这里讲了。实现完这个规范后,与同样支持Range Requests规范的客户端结合起来使用就能达到上面的效果(目前大部分的浏览器都支持这个规范)。

前端页面

我之前试用过Trae的海外版,在我开发这个下载服务器的时候,Trae的国内版也是出了,刚好试试用了国内大模型的Trae生成速度以及智能性怎么样。

经过我几分钟的使用后,成功的将前端页面生成了出来。

给大家看看生成这个页面总共要几步,可以说大大降低了我这个后端程序员开发前端页面的工作量了。

快速使用

得益于SpringBoot3原生支持GraalVM,所以我们可以很方便的使用GrallVM JDK来编译成可执行文件,启动服务器时无需JDK的依赖。

只需要在pom.xml文件中编译插件增加下面的插件

xml
代码解读
复制代码
<plugin> <groupId>org.graalvm.buildtoolsgroupId> <artifactId>native-maven-pluginartifactId> plugin>

然后在安装GrallVM JDK后,命令行执行

bash
代码解读
复制代码
mvn -Pnative native:compile

经过漫长的等待后,你就能得到一个无需任何依赖项的可执行文件,启动后就能部署一个文件下载服务器。

这个编译后的可执行文件我也上传到了仓库中,不想整个仓库拉下来运行的话,可以尝试单个文件执行。

速度对比

开发完了之后,我试了一下整体的下载速度,还是挺快的,能达到147MB/s,但好像这也不是局域网传输速度的上限,但是这篇文章写到这也差不多了,有关速度优化的就留到下一篇文章再写吧。

数据线(速度太慢了就不继续了)FileDownloadHub-4GB的文件用了大约40秒
注:本文转载自juejin.cn的Azir12138的文章"https://juejin.cn/post/7495291825063100442"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

103
后端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top