技术点描述
上传大文件并且没有内存压力的文件服务。
实现方案
Netty利用块(HttpChunk)对开发文件服务器端做了很好的实现:
内容存储方式:
内存、硬盘、混合存储。
参考源码包
-
源码包:
- 接口/抽象类/类说明:
- InterfaceHttpData(interface):实现该接口的对象可以用HttpPostRequestEncoder/Decoder编解码
- HttpDataFactory(interface):创建InterfaceHttpData对象
- HttpData(interface):继承InterfaceHttpData
- Attribute(interface):属性接口,继承HttpData
- FileUpLoad(interface):可存放在内存、临时文件或一些其他实现
DefaultHttpDataFactory
根据构造函数给FileUpload和Attribute提供默认的工厂。
- 重要方法:
-
public DefaultHttpDataFactory(boolean useDisk) {
this.useDisk = useDisk;
checkSize = false;
}
参数为true时设置为硬盘存储,为false内存存储
-
public DefaultHttpDataFactory(long minSize) {
useDisk = false;
checkSize = true;
this.minSize = minSize;
}
为混合存储模式,如果HttpData大于最小值将会存储在硬盘,否则存储在内存
-
重要属性
private final ConcurrentHashMap<HttpReq