大文件切片上传思路

/**
 * 上传文件
 * @param file
 */

public static boolean upload(MultipartFile file,String filePath){
if(file == null || file.isEmpty()){
return false;
}
File dest = new java.io.File(filePath);
// 判断路径是否存在,如果不存在则创建
java.io.File folder = dest.getParentFile();
if(!folder.exists()) {
folder.mkdirs();
}
try {
//保存文件
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(filePath));
outputStream.write(file.getBytes());
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return true;
}

/**
* 递归遍历文件,查找符合后缀名文文件读入
* @param file
*/
public static boolean recursiveTraversalFiles(File file,BufferedOutputStream bos) throws IOException {
if(file.isFile()){
//获取文件名
String fileName = file.getName();
//截取后缀名
String suffix = fileName.substring(fileName.lastIndexOf(“.”)+1);
if(“txt”.equals(suffix)){
//判断是md文件,完成文件读入操作
readFile(file,bos);
}
}else {
File[] files = file.listFiles();
for(File fi :files){
//递归遍历文件
recursiveTraversalFiles(fi,bos);
}
}
return true;
}

/**## 标题
 * 文件读入操作
 * @param file
 * @param bos
 */
public static void readFile(File file,BufferedOutputStream bos){
    BufferedInputStream bis = null;;
    try {
        bis = new BufferedInputStream(new FileInputStream(file));
        int len =-1;
        byte[] bytes = new byte[1024];
        while((len = bis.read(bytes))!=-1){
            bos.write(bytes,0,len);
        }
        bis.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

//文件上传
boolean bool = true;
//切片存放根目录
String section = pro.getProperty(“filestore.section”);

        //创建临时文件夹,用来存放分片文件
        File folder = new File(section + fileBean.getFilename());
        folder.mkdirs();
        //判断是不是最后一个分片
        if (fileBean.getChunkindex() + 1 != fileBean.getChunktotal()) {
            //将分片以.txt文件形式放在本地
            FileUtil.upload(file, section + fileBean.getFilename() + "/" + fileBean.getChunkindex() + ".txt");
        } else {
            //将分片以.txt文件形式放在本地
            FileUtil.upload(file, section + fileBean.getFilename() + "/" + fileBean.getChunkindex() + ".txt");

            filevo.setFilename(fileBean.getFilename()); //暂存文件名称
            //上传后文件名称
            String localFileName = getFileName(filevo);
            filevo.setFilename(localFileName); //最终保存的文件名称
            String fileDiskPath = fileDisk + "/" + fpath + "/" + localFileName;

            //需要递归遍历的文件夹的绝对路径
            File filess = new File(section + fileBean.getFilename());

            //创建文件夹路径
            File filePath = new File(fileDisk + "/" + fpath);
            filePath.mkdirs();

            //合并之后的文件的路径以及文件名
            File outFile = new File(fileDiskPath);
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outFile));
            //切片合并上传
            bool = FileUtil.recursiveTraversalFiles(filess, bos);
            bos.close();
            //删除临时文件夹
            FileUtil.deleteDirectory(section + fileBean.getFilename());
        }

        if(bool&&fileBean.getChunkindex() + 1 == fileBean.getChunktotal()){ //上传成功
            if(DataCheck.isNull(fileid)){ //新增
                fileid = this.etmffileinfoDao.newObject(filevo, EtmffileinfoVO.class).getObjectid();
            }else{ //更新
                EtmffileinfoVO etmffileinfoVO = this.loadObject(fileid, EtmffileinfoVO.class);
                if((DataCheck.isNull(etmffileinfoVO.getVersion())&&DataCheck.isNull(fileBean.getVersion()))||etmffileinfoVO.getVersion().equals(fileBean.getVersion())){
                    //文件更新,修改原来数据
                    FileUtil.deleteFile(fileDisk+etmffileinfoVO.getFilepath()+"/"+etmffileinfoVO.getFilename());

                    etmffileinfoVO.setFilesize(filevo.getFilesize());
                    etmffileinfoVO.setFiletype(filevo.getFiletype());
                    etmffileinfoVO.setDeleted(filevo.getDeleted());
                    etmffileinfoVO.setCreatedat(filevo.getCreatedat());
                    etmffileinfoVO.setUpdatedat(filevo.getUpdatedat());
                    etmffileinfoVO.setUpdateusername(personName);
                    etmffileinfoVO.setFilepath(filevo.getFilepath());
                    etmffileinfoVO.setProjectid(filevo.getProjectid());
                    etmffileinfoVO.setProjectname(filevo.getProjectname());
                    etmffileinfoVO.setCountryid(filevo.getCountryid());
                    etmffileinfoVO.setCountryname(filevo.getCountryname());
                    etmffileinfoVO.setSiteid(filevo.getSiteid());
                    etmffileinfoVO.setSitename(filevo.getSitename());
                    etmffileinfoVO.setParentid(filevo.getParentid());
                    etmffileinfoVO.setUpdateremark(filevo.getUpdateremark());
                    etmffileinfoVO.setProcessid(filevo.getProcessid());
                    etmffileinfoVO.setProcessname(filevo.getProcessname());
                    etmffileinfoVO.setBelonguserid(filevo.getBelonguserid());
                    etmffileinfoVO.setBelongusername(filevo.getBelongusername());
                    etmffileinfoVO.setLastCheckId(filevo.getLastCheckId());

                    etmffileinfoVO.setFileext(filevo.getFileext());
                    etmffileinfoVO.setVersion(filevo.getVersion());
                    etmffileinfoVO.setVersiondate(filevo.getVersiondate());
                    etmffileinfoVO.setFilename(filevo.getFilename()); //最终保存的文件名称

                    etmffileinfoDao.updateObject(etmffileinfoVO,EtmffileinfoVO.class);
                }else {
                    //版本更新,新增一条数据
                    fileid = this.etmffileinfoDao.newObject(filevo, EtmffileinfoVO.class).getObjectid();
                }
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值