最近很多朋友在go-fastdfs的微信群里面问道,go-fastdfs什么时候支持流上传?其实一直都支持的!为什么这样子说呢?因为go-fastdfs本身就是基于http协议进行传输的,那么如果有读者对Java的HttpURLConnection的源码研究过的话,会发现其内部也是可以通过conn.getInputStream()和conn.getOutputStream()获取其输入输出流,通常可以直接往outputStream里面写入符合http协议的数据。那么根据这个特点,在Java里面,直接通过流的形式(通常是从MultipartFile里面获取InputStream)再上传到go-fastdfs是没问题的。跟http协议相关的知识点包括http协议报文格式和上传二进制数据等如果不了解可以先自行百度一下。这里不会细讲的哦。
引发认为go-fastdfs不能直接流上传的原因
经过本人的分析认为,让广大读者认为不能直接使用流上传的原因应该是go-fastdfs的github的代码示例造成一些误会。不过官方的代码示例并没有错误,只是直接从本地读取文件系统的文件,形成File对象进行上传。针对使用Spring等框架接收前端上传过来的文件再进行转发上传到go-fastdfs的用户,就可能会有疑惑。因为获取到的是MultipartFile,而非java.io.File。
直接上图(go-fastdfs的github截图)
Hutool-http、HttpClient、OkHttp3多种方式流式文件上传
由于有不少人问到上面的问题,现在本人总结了一个常用的几种http客户端文件流式上传的方式,相当于给自己做下记录,同时也给有这方面疑问的朋友一个借鉴。废话不多说,直接上代码吧。代码是基于springboot的mave