cloud微服务-文件服务器-导出上传下载

1.yml文件配置文件配置:


    #控制文件上传大小,-1不控制大小
  servlet:
    multipart:
      max-file-size: -1
      max-request-size: -1

2.上传文件
上传到指定服务器,后返回id和name(id属性要赋值到相关业务表中)

 @RequestMapping("/upLoad")
    @ResponseBody
    public String upload(@RequestParam("file") MultipartFile file, @RequestParam("BUSINESSCODE") String BUSINESSCODE, @RequestParam("TYPECODE") String TYPECODE) {
        logger.info("******文件上传开始******");
        Map<String, String> resMap = new HashMap<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        if (!file.isEmpty()) {
            try {
                logger.info("BUSINESSCODE:" + BUSINESSCODE);
                logger.info("TYPECODE:" + TYPECODE);
                String fileName = file.getOriginalFilename();//文件名
                logger.info("原文件名:" + fileName);
                String fileType = (fileName.lastIndexOf(".") >= 0) ? fileName.substring(fileName.lastIndexOf("."), fileName.length()) : "";//文件类型
                logger.info("文件类型:" + fileType);
                String fileId = UUID.randomUUID().toString().replaceAll("-", "");//返回的文件ID
                //logger.info("文件ID:" + fileId);
                String dir = new StringBuilder().append(this.uploadPath).append("/").append(sdf.format(new Date())).append("/").append(BUSINESSCODE).append("/").append(TYPECODE).toString();//文件夹地址
                logger.info("文件夹地址:" + dir);
                File dirFile = new File(dir);//生成文件
                if (!dirFile.exists()) {
                    dirFile.mkdirs();
                }
                //String newFileName = new StringBuilder().append(fileId).append(fileType).toString();//服务器存储的文件名
                //logger.info("存储的文件名:" + newFileName);
                String path = new StringBuilder().append(dir).append("/").append(fileName).toString();
                ;//文件存储路径
                logger.info("文件存储路径:" + path);
                File fileFile = new File(path);
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fileFile));
                out.write(file.getBytes());
                out.flush();
                out.close();
                //保存数据库
                com.claims.loadmanage.entity.File fileInFo = new com.claims.loadmanage.entity.File();
                fileInFo.setFileId(fileId);
                fileInFo.setFileName(fileName);
                fileInFo.setLocalPath(path);
                fileInFo.setCreatetime(new Date());
                fileInFo.setSize(fileFile.length());
                int saveResInt = loadManageService.insertSelective(fileInFo);
                //Map<String, String> rowsMap = new HashMap<>();
                if (saveResInt > 0) {
                    //rowsMap.put("FILEID",fileId);
                    //rowsMap.put("FILENAME", fileName);
                    resMap.put("FLAG", "true");
                    resMap.put("FILEID", fileId);
                    resMap.put("FILENAME", fileName);
                    resMap.put("MSG", "文件上传成功");
                } else {
                    resMap.put("FLAG", "false");
                    resMap.put("MSG", "文件上传失败");
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                resMap.put("FLAG", "false");
                resMap.put("MSG", "文件上传失败");
            } catch (IOException e) {
                resMap.put("FLAG", "false");
                resMap.put("MSG", "文件上传失败");
            }

        } else {
            resMap.put("FLAG", "false");
            resMap.put("MSG", "上传文件为空");
        }
        logger.info("文件上传返回信息:" + JSON.toJSONString(resMap));
        logger.info("******文件上传结束******");
        return JSON.toJSONString(resMap);
    }

3.导出列表页全部文件(zip)
例如半身照导出

 /**
     * 半身照导出
     */
    @RequestMapping("/halfPhotoDownLoad")
    @ResponseBody
    public String halfPhotoDownLoad(@RequestBody String paramStr){
        logger.info("******半身照导出开始******");
        //1.获取基础数据
        String res = estimatorManageFeignClientService.selectEstimatorHalfPhoto(paramStr);
        logger.info("半身照导出查询公估师返回:" + res);
        //解析出参
        Map<String, String> resMap = JSON.parseObject(res, Map.class);
        List<Map<String, String>> rowsList = JSON.parseObject(JSON.toJSONString(resMap.get("resultInfo")), List.class);
        logger.info("半身照导出返回信息解析后:" + JSON.toJSONString(rowsList));
        //2.根据半身照ID查询影像路径,保存到指定文件夹
        //保存到指定文件夹
        File fileStorageDir = new File("/opt/claims/storage/");//暂存文件路径
        if (!fileStorageDir.exists()) {//新建文件夹
            fileStorageDir.mkdir();
        }
        Map<String, String> ressMap = new HashMap<>();
        for (Map<String, String> rowsMap : rowsList) {
            List<Map<String, String>> halMap = JSON.parseObject(JSON.toJSONString(rowsMap.get("HALFLENGTHIMGJSON")), List.class);
            int i=1;
            for (Map fileMap : halMap) {
            String fileId = fileMap.get("fileId").toString();//半身照ID
            logger.info("半身照ID:" + fileId);
                String estimatorCode = "";
                if(halMap.size() == 1){
                     estimatorCode = rowsMap.get("ESTIMATORNAME")+"-"+rowsMap.get("CREDENTALNUM");//姓名+身份证
                }else{
                     estimatorCode = rowsMap.get("ESTIMATORNAME")+"-"+rowsMap.get("CREDENTALNUM")+"("+i+")";//姓名+身份证
                    i++;
                }
            logger.info("组合文件名:" + estimatorCode);
            //查文件路径
            com.claims.loadmanage.entity.File fileInFo = loadManageService.selectFilePath(fileId);
            logger.info("查找到的文件信息:" + JSON.toJSONString(fileInFo));
            String sourceFilePath = fileInFo.getLocalPath();//原文件路径
            String sourceFileName = fileInFo.getFileName();//原文件名
            rowsMap.put("FILEPATH", sourceFilePath);
            File sourceFile = new File(sourceFilePath);//原文件
            String fileType = (sourceFileName.lastIndexOf(".") >= 0) ? sourceFileName.substring(sourceFileName.lastIndexOf("."), sourceFileName.length()) : "";//原文件类型
            logger.info("文件类型:" + fileType);
            String nowFileName = estimatorCode + fileType;//现文件名
            logger.info("现文件名:" + nowFileName);
            String nowFilePath = fileStorageDir.toString() + File.separator + nowFileName;//现文件地址
            logger.info("现文件地址:" + nowFilePath);
            try {
                InputStream fileInputStream = new FileInputStream(sourceFile);//源文件放输入流
                OutputStream fileOutputStream = new FileOutputStream(nowFilePath);//现文件放输出流
                BufferedInputStream bis = new BufferedInputStream(fileInputStream);
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = fileInputStream.read(buffer)) > 0) {
                    fileOutputStream.write(buffer, 0, len);
                }
                if (fileOutputStream != null) {
                    fileOutputStream.close();
                }
                if (bis != null) {
                    bis.close();
                }
                if (fileInputStream != null) {
                    fileInputStream.close();
                }

            } catch (FileNotFoundException e) {
                ressMap.put("FLAG", "false");
                ressMap.put("MSG", "导出文件为空");
                e.printStackTrace();//找不到文件
            } catch (IOException e) {
                ressMap.put("FLAG", "false");
                ressMap.put("MSG", "文件写入错误");
                e.printStackTrace();//流错误
            }
        }
        }
        //3.打包指定文件夹中的文件
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");//设置日期格式
        Date date = new Date();
        String zipName = "HALFLENGTHIMG" + df.format(date) + ".zip";
        logger.info("压缩包名称:" + zipName);
        String fileID = null;
        try {
            zipName = URLEncoder.encode(zipName, "utf-8");
            File zipPath1 = new File("/opt/claims/zip/" );//压缩文件存放地址
            logger.info("压缩文件存放地址:" + zipPath1);
            if (!zipPath1.exists()) {
                zipPath1.mkdir();
                logger.info("创建压缩包文件路径");
            }
            File zipPath = new File("/opt/claims/zip/" + df.format(date));//压缩文件存放地址
            logger.info("压缩文件存放地址:" + zipPath);
            if (!zipPath.exists()) {
                zipPath.mkdir();
                logger.info("创建压缩包文件路径");
            }
            File[] files = new File("/opt/claims/storage/").listFiles();//原文件地址
            logger.info("文件个数:"+files.length);
            String path1= zipPath.getPath()+zipName;
            FileOutputStream fos = new FileOutputStream(new File(path1));
            BufferedOutputStream bo = new BufferedOutputStream(fos);
            ZipOutputStream out = new ZipOutputStream(bo);
            byte[] buf = new byte[1024];
            logger.info("开始压缩:");
            if (files != null) {
                for (int i = 0; i < files.length; i++) {
                    String fie = files[i].toString();
                    FileInputStream inputStream = new FileInputStream(fie);
                    out.putNextEntry(new ZipEntry(files[i].getName()));
                    int len;
                    if (inputStream.available() > 0) {
                        while ((len = inputStream.read(buf)) > 0) {
                            out.write(buf, 0, len);
                        }
                    }
                    inputStream.close();
                    System.gc();//回收资源
                    boolean delete = files[i].delete();
                    logger.info(delete == true ? "暂存文件删除成功" : "暂存文件删除失败");
                }
                bo.flush();
                out.closeEntry();
                out.close();
                logger.info("******文件打包完成******");
                new File("/opt/claims/storage/").delete();
                //将压缩文件上传
                String path = loadPath + "?BUSINESSCODE=zip&TYPECODE=zip";
                String resInFo = null;
                CloseableHttpClient httpClient = HttpClients.createDefault();
                HttpPost httppost = new HttpPost(path);
                File zipfile = new File(path1);
                FileBody fileBody = new FileBody(zipfile);
                FormBodyPart filePart = new FormBodyPart("file", fileBody);
                MultipartEntity multipartEntity = new MultipartEntity();
                multipartEntity.addPart(filePart);
                httppost.setEntity(multipartEntity);
                CloseableHttpResponse httpResponse = httpClient.execute(httppost);
                HttpEntity entity = httpResponse.getEntity();
                res = EntityUtils.toString(entity, "UTF-8");
                //解析返回信息
                logger.info("上传返回信息:" + res);
                Map<String, String> httpResMap = JSON.parseObject(res, Map.class);
                fileID = httpResMap.get("FILEID");
                ressMap.put("FILEID",fileID);
                ressMap.put("FLAG", "true");
                logger.info("返回的文件ID:" + fileID);
                httpResponse.close();
                //删除
               File[] zipfiles = new File("/opt/claims/zip/" + df.format(date)).listFiles();
                for (int n = 0; n < zipfiles.length; n++) {

                    boolean delete = zipfiles[n].delete();
                    logger.info(delete == true ? "半身照zip删除成功" : "半身照zip删除失败");
                }
                new File("/opt/claims/zip/" + df.format(date)).delete();
                new File("/opt/claims/zip/").delete();

            }
        } catch (UnsupportedEncodingException e) {
            ressMap.put("FLAG", "false");
            ressMap.put("MSG", "文件写入错误");
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            ressMap.put("FLAG", "false");
            ressMap.put("MSG", "下载文件为空");
            e.printStackTrace();
        } catch (IOException e) {
            ressMap.put("FLAG", "false");
            ressMap.put("MSG", "文件写入错误");
            e.printStackTrace();
        }
        logger.info("******半身照导出结束******");
        logger.info("出参"+JSON.toJSONString(ressMap));
        return JSON.toJSONString(ressMap);
    }

4.除了这些,也有一些excel的上传下载;
下载和上述的类似
上传时,分两步,第一步,上传文件,返回id
第二步,调用excel解析服务,获取数据库配置,列对应,校验规则,
第三步,解析文件,按照列对应规则,匹配数据后,返回前台
第四步:(可有可无)对excel数据也可能会做处理

希望能够帮助到你们

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值