bootstrap-fileinput分片上传

bootstrap-fileinput是基于bootstrap的文件上传插件,在5.0版本中新增了分片上传功能,注意,一定要大于等于5.0的版本才有分片上传的功能!对于需要上传大文件,但是NG网关又无法放开包大小限制的情况,就可以使用分片上传。

开启分片上传

使用分片上传功能需要在bootstrap-fileinput的初始化中加入以下配置:

enableResumableUpload: true,
resumableUploadOptions: {
	testUrl: "/site/test-file-chunks",
	chunkSize: 1024, // 1 MB chunk size
},

其中resumableUploadOptions是可选的。testUrl用来配置获取已完成上传分片编号的地址,如果需要断点续传则配置,不需要可不配置。chunkSize用来配置分片大小,默认是2MB。

服务端代码

分片上传模式下,服务端处理器的参数和返回值与直接上传有所不同。以抓娃为例,参数如下:

public class ChunkUploadParamVO {
    private String fileId; //文件ID,格式:文件大小_文件名
    private String fileName; //文件名
    private String fileRelativePath; //文件路径
    private long chunkIndex; //分片编号
    private long fileSize; //文件大小
    private long chunkSize; //分片大小
    private long chunkSizeStart; //分片偏移字节数
    private long chunkCount; //总分片数
    private long retryCount; //重试次数
    private MultipartFile fileBlob; //分片内容
}

分片上传响应结构示例:

public class ChunkUploadResultVO {
    private long chunkIndex; //已上传完成分片编号
    private String error; //错误信息
}

另外需要注意的是分片并不是严格按顺序到达服务端的,所以依赖当前分片编号与总分片数判断文件是否上传完是不可靠的。

附录:

  1. 文档:https://plugins.krajee.com/file-input#ajax-resumable
  2. demo:https://plugins.krajee.com/file-resumable-uploads-demo