/httpfile-netty

使用Netty实现更好的HTTP文件传输

Primary LanguageJava

项目说明

本项目旨在通过Netty实现基于Http的文件传输来完成更高效的Http文件处理,可单独使用亦可搭配Spring使用

  • 下载文件链接为:http://<ip>:<port>/file/rapid/download/<uuid> 其中uuid为路径参数,指出下载哪个文件。请求方法是GET

  • 上传文件链接为:http://<ip>:<port>/file/rapid/upload/<uuid> 其中uuid指明了要保存的文件的信息,包括保存路径,由其他请求实现,请求方法为POST

  • 下载文件时,解析uuid得到的是:<目标文件位置>(精确到具体文件),比如:/home/cfm/myfile/123.txt

  • 上传文件时,解析uuid得到的是:<保存位置>;<新文件名>; 其中';'是分隔符,如果新文件名为空,默认使用原文件名。

  • 注:保存位置精确到目录,而不是分隔符,新文件名不包含后缀,所以不支持更改后缀名。比如:/home/cfm/myfile;456;或/home/cfm/yourfile;

具体实现

  • 对于文件上传,使用保存在硬盘的方式接收文件,和普通处理没什么区别,但是因为不需要内存的参与,所以对内存有好,缺点就是较常规方式慢一些。

  • 对于文件下载,如果使用的是SSL加密的HTTPS,那么使用分块传输,块大小可设置,默认10M。如果是普通的HTTP,那么就是用零拷贝的特性来传输,减少内存复制,加快传输速度。

  • uuid作为redis的key来实现对于所需数据的获取,所以要求Redis环境。

  • 为了追求极尽所能的性能,异常处理和突发处理不算很完善,请调用时保证文件位置,R/W等属性均为正确的。