标签:pix ldo init java 查看 io流 目的 之间 表格
ps:本篇文章的主要内容为从后端获取数据,并将多条数据以Excel表格的方式存储,并实现基于OSS的上传和下载
OSS对象存储,EasyExcel 两者都来自于阿里云,请提前进行两者的基础知识学习
实体类需要继承BaseRowModel类,但目前这个类已被禁用,我还没找到替代方式
@Data
public class User extends BaseRowModel {
@ExcelProperty("编号")
private int id;
@ExcelProperty("姓名")
private String name;
@ExcelProperty("日期")
private Date date;
@ExcelProperty("内容")
private String content;
}
这里可以用注解来设定Excel表格的表头,同时官网有更多种自定义以及复杂表头的设置,这里照例贴上官方文档路径
https://www.yuque.com/easyexcel/doc/easyexcel
@Component
public class EasyExcelUtil<T extends BaseRowModel>{
//生成一个读取数据库数据产生的excel字节文件
//最普通的EasyExcel用法
public ByteArrayOutputStream easyOut(List<T> list, Class<T> clazz) throws Exception{
//上传文件的命名规则,暂时没写
//extension==.xlsx
String extension = ExcelTypeEnum.XLSX.getValue();
//建立一个字节数组输出流,将excel文件的内容存入其中
ByteArrayOutputStream out = new ByteArrayOutputStream();
/**
* 这里指定用哪个class去写,然后写到第一个sheet,名字为模板,然后文件流会自动关闭
* 这里可以定义表格的各种样式
* out为字节流
* clazz为实体类的反射
*/
EasyExcel.write(out, clazz).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("模板").doWrite(list);
//System.out.println(ExcelTypeEnum.XLSX.getValue());
return out;
}
}
这里写了一个非常基础的工具方法,主要的核心代码其实就一句
EasyExcel.write(out, clazz).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).sheet("模板").doWrite(list);
EasyExcel:一种最常用的工具类,主要提供了Write()方法
write() : 里面的参数,第一个为Excel表格写入的目的地,目前总结两种填法(更多填法请参考文档)
registerWriteHandler:表格宽度自适应,这个不精确
sheet :这个方法也有很多传参方式,主要是提供表格的页数和页名
doWrite :写入的内容,比如一个以对象方式存储了多条数据的list集合
@Component
public class OSSClientUtil {
// endpoint是访问OSS的域名。如果您已经在OSS的控制台上 创建了Bucket,请在控制台上查看域名。
// 如果您还没有创建Bucket,endpoint选择请参看文档中心的“开发人员指南 > 基本概念 > 访问域名”,
// 链接地址是:https://help.aliyun.com/document_detail/oss/user_guide/oss_concept/endpoint.html?spm=5176.docoss/user_guide/endpoint_region
// endpoint的格式形如“http://oss-cn-hangzhou.aliyuncs.com/”,注意http://后不带bucket名称,
// 比如“http://bucket-name.oss-cn-hangzhou.aliyuncs.com”,是错误的endpoint,请去掉其中的“bucket-name”。
private static String endpoint = "http://oss-cn-shanghai.aliyuncs.com";
// accessKeyId和accessKeySecret是OSS的访问密钥,您可以在控制台上创建和查看,
// 创建和查看访问密钥的链接地址是:https://ak-console.aliyun.com/#/。
// 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
private static String accessKeyId = "LTAI5tPjFTLT215QNDVaiNmB";
private static String accessKeySecret = "bag38d0ldoIhiVW88zPIxDzMEJiPj3";
// Bucket用来管理所存储Object的存储空间,详细描述请参看“开发人员指南 > 基本概念 > OSS基本概念介绍”。
// Bucket命名规范如下:只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
private static String bucketName = "mytesto";
// 生成OSSClient,您可以指定一些参数,详见“SDK手册 > Java-SDK > 初始化”,
// 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/init.html?spm=5176.docoss/sdk/java-sdk/get-start
OSS ossClient = null;
public void fileUpload(ByteArrayOutputStream out){
ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//判断桶名是否存在,如果不存在就新建一个
//
if (ossClient.doesBucketExist(bucketName)) {
System.out.println("您已经创建Bucket:" + bucketName + "。");
} else {
System.out.println("您的Bucket不存在,创建Bucket:" + bucketName + "。");
// 创建Bucket。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
// 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
ossClient.createBucket(bucketName);
}
// 查看Bucket信息。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。
BucketInfo info = ossClient.getBucketInfo(bucketName);
System.out.println("Bucket " + bucketName + "的信息如下:");
System.out.println("\t数据中心:" + info.getBucket().getLocation());
System.out.println("\t创建时间:" + info.getBucket().getCreationDate());
System.out.println("\t用户标志:" + info.getBucket().getOwner());
//具体的文件上传,获取Excel文件的数据
InputStream is = new ByteArrayInputStream(out.toByteArray());
ossClient.putObject(bucketName, "456.xlsx", is);
System.out.println("Object:" + "456.xlsx" + "存入OSS成功!!!");
ossClient.shutdown();
}
//获取可以下载的URL
public String getDownURL(String fileName){
ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
Date expiration = new Date(new Date().getTime() + 3600l * 1000);//过期时间设为1小时
// 生成URL
URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);
if (url != null) {
return url.toString();
}
return null;
}
这部分内容可见我的另一篇关于OSS对象存储入门的博客,其内容基本相似
@RestController
public class UserController {
@Autowired
private UserService userService;
@Autowired
private EasyExcelUtil easyExcelUtil;
@Autowired
private OSSClientUtil ossClient;
@GetMapping("/test")
public void test() throws Exception {
List<User> list = userService.findAll();
//文件上传到OSS
ossClient.fileUpload(easyExcelUtil.easyOut(list,User.class));
//根据这个文件的名字获取下载链接,链接有效时长一小时
String s = ossClient.getDownURL("456.xlsx");
System.out.println("文件上传成功!!!");
System.out.println(s);
//return s;
}
}
以上完结。
标签:pix ldo init java 查看 io流 目的 之间 表格
原文地址:https://www.cnblogs.com/mlck/p/14654661.html