文件上传(支持csv,xls,xlsx,txt格式)把文件导入到minio,还需要生成一个demo临时文件只放10条数据

Posted 疯狂小公举

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件上传(支持csv,xls,xlsx,txt格式)把文件导入到minio,还需要生成一个demo临时文件只放10条数据相关的知识,希望对你有一定的参考价值。

文件上传(支持csv,xls,xlsx,txt格式)把文件导入到minio,还需要生成一个demo临时文件只放10条数据

service处理逻辑

  1. MultipartFile类型文件上传
  2. 先读出上传文件的前10条数据
  3. 创新临时文件,将读到的数据写入新创建的文件
  4. 再上传到minio
  /**
     * 本地文件上传(将文件上传到minio)
     * 读取前十条存入新的文件中并上传到minio
     *
     * @param file
     * @return
     */
    @Override
    public RestResponse exportLocalFileData(MultipartFile file) 
        File newFile = null;
        try 
            //获取文件后缀名
            String prefix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
            if (".xls".equals(prefix) || ".xlsx".equals(prefix)) 
                //excel文件
                StringExcelListener listener = new StringExcelListener();
                try (InputStream inputStream = new ByteArrayInputStream(file.getBytes())) 
                    ExcelReader excelReader = EasyExcelFactory.read(inputStream, null, listener).headRowNumber(0).build();
                    excelReader.read();
//                默认查10行
                    List<List<String>> datas = listener.getDatas(10);
                    // 新的文件的名字
                    String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().indexOf("."));
                    newFile = File.createTempFile(fileName, prefix);
                    log.info("newFile=", newFile);
                   try(OutputStream out = new FileOutputStream(newFile))
                       ExcelWriter writer = EasyExcelFactory.write(out).excelType(ExcelTypeEnum.XLSX).build();
                       Sheet sheet1 = new Sheet(1, 0);
                       sheet1.setSheetName("sheet1");
                       writer.write0(datas, sheet1);
                       writer.finish();
                       excelReader.finish();
                   
                
             else if (".txt".equals(prefix) || ".csv".equals(prefix)) 
                //txt文件或csv文件
                // 新的文件的名字
                String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().indexOf("."));
                newFile = File.createTempFile(fileName, prefix);
                log.info("newFile=", newFile);
                String charsetName = "";
                if (".csv".equals(prefix)) 
                    charsetName = "GBK";
                 else if (".txt".equals(prefix)) 
                    charsetName = "UTF-8";
                
                InputStreamReader inputStreamReader = new InputStreamReader(file.getInputStream(), charsetName);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                try (FileOutputStream fileOutputStream = new FileOutputStream(newFile)) 
                    try (OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, charsetName)) 
                        try (BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter)) 
                            String lineTxt;
                            // 从源文件中读10行内容,然后写入到目标文件中
                            int count = 0;
                            //从缓存字符流中,读一行字符
                            while (count < 10 && (lineTxt = bufferedReader.readLine()) != null) 
                                System.out.println(lineTxt);
                                //在读出来的一行的 末尾,加入换行符。不然文件是不换行地连成一句话
                                bufferedWriter.write(lineTxt + System.getProperty("line.separator"));
                                count++;
                            
                        
                    
                
            
            //file转换为multipartFile类型
            MultipartFile multipartFile = getMultipartFile(newFile);
            log.info("file转multipartFile成功. ", multipartFile);
            try (InputStream inputStream = new ByteArrayInputStream(file.getBytes())) 
                try (InputStream inputStream1 = new ByteArrayInputStream(multipartFile.getBytes())) 
                    //获取用于存放临时文件或大文件的路径
                    String objectName = MinioUtil.getTempToMinioPath(file.getOriginalFilename());
                    //获取用于存放临时文件或新的文件的路径
                    String newObjectName = objectName.substring(0, objectName.indexOf(".")) + "-demo" + prefix;
                    String path = minionService.putObject(BucketName.TEMP, objectName, inputStream);
                    String newPath = minionService.putObject(BucketName.TEMP, newObjectName, inputStream1);
                    log.info("上传成功后的文件路径: ", path);
                    log.info("上传成功后的文件路径: ", newPath);
                    Map<Object, Object> map = new HashMap<>();
                    map.put("path", path);
                    map.put("newPath", newPath);
                    newFile.deleteOnExit();
                    return RestResponse.success("上传成功").setData(map);
                
            
         catch (Exception e) 
            log.info("exportNeedFileData : ", e);
            return RestResponse.success("上传失败");
        
    

以上是关于文件上传(支持csv,xls,xlsx,txt格式)把文件导入到minio,还需要生成一个demo临时文件只放10条数据的主要内容,如果未能解决你的问题,请参考以下文章

python 将 csv转excel (.xls和.xlsx)的几种方式

这个简单、易于实现的库可以将HTML表导出为xlsx、xls、csv和txt文件。

数据读写csv文件与xls/xlsx文件

数据读写csv文件与xls/xlsx文件

正则表达式 判断文件名后缀是不是为 csv xls xlsx

自制文档格式转换器,支持 .txt/.xlsx/.csv格式转换...