分片上传说明文档
前端参考代码
分片上传是前后端协同工作的,前端已经测试可用的参考代码为upload.html,请把分页上传这个文件夹考到自己的项目当中,进行集成
后台参考代码
在前端配置好访问路径
打开upload.html找到如下配置
结合spring mvc框架
获取前端参来的参数,请参考FileController
上传文件页面
/**
*
* 保存文件
*
* @param data 数据
* @param filePath 目标文件名
* @param fileSize 文件总大小
* @param chunkInfo 分块信息
* @return 完整文件保存成功时返回文件地址,否则返回null。
* 注:分块上传的文件,只在所有分块均上传完时才返回文件地址
* @exception/throws [异常类型] [异常说明](可选)
* @author jiangshunyao
* @date 2017年8月22日 下午5:17:20
* @since [起始版本]
*/
public static String saveFile(byte[] data, String filePath, long fileSize, ChunkInfo chunkInfo)
{
if (chunkInfo == null)
{
throw new BBKException("分块信息不能为空");
}
LOGGER.info("上传分块文件:id:{}, 分块号:{}, 分块总数:{}, 分块大小:{}", chunkInfo.getId(), chunkInfo.getChunkNo(),
chunkInfo.getChunkCount(), chunkInfo.getSize());
if (null == chunkInfo.getId() || "".equals(chunkInfo.getId().trim()))
{
throw new BBKException("分块信息的id不能为空chunkId:" + chunkInfo.getId());
}
if (!saveChunk(data, filePath, chunkInfo))
{
throw new BBKException("保存文件失败:" + filePath);
}
if (addChunkCounterAndCheckIfComplete(getChunkedFileId(chunkInfo.getId(), fileSize), chunkInfo.getChunkCount()))
{
File file = new File(filePath);
LOGGER.info("文件大小:{}", file.length());
LOGGER.info("保存分块数据完成:{}", filePath);
return filePath;
}
return null;
}
/** * * 保存文件 * * @param data 数据 * @param filePath 目标文件名 * @param fileSize 文件总大小 * @param chunkInfo 分块信息 * @return 完整文件保存成功时返回文件地址,否则返回null。 * 注:分块上传的文件,只在所有分块均上传完时才返回文件地址 * @exception/throws [异常类型] [异常说明](可选) * @author jiangshunyao * @date 2017年8月22日 下午5:17:20 * @since [起始版本] */ public static String saveFile(byte[] data, String filePath, long fileSize, ChunkInfo chunkInfo) { if (chunkInfo == null) { throw new BBKException("分块信息不能为空"); } LOGGER.info("上传分块文件:id:{}, 分块号:{}, 分块总数:{}, 分块大小:{}", chunkInfo.getId(), chunkInfo.getChunkNo(), chunkInfo.getChunkCount(), chunkInfo.getSize()); if (null == chunkInfo.getId() || "".equals(chunkInfo.getId().trim())) { throw new BBKException("分块信息的id不能为空chunkId:" + chunkInfo.getId()); } if (!saveChunk(data, filePath, chunkInfo)) { throw new BBKException("保存文件失败:" + filePath); } if (addChunkCounterAndCheckIfComplete(getChunkedFileId(chunkInfo.getId(), fileSize), chunkInfo.getChunkCount())) { File file = new File(filePath); LOGGER.info("文件大小:{}", file.length()); LOGGER.info("保存分块数据完成:{}", filePath); return filePath; } return null; }