文件上传(支持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处理逻辑
- MultipartFile类型文件上传
- 先读出上传文件的前10条数据
- 创新临时文件,将读到的数据写入新创建的文件
- 再上传到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文件。