前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Springboot3+EasyExcel由浅入深

Springboot3+EasyExcel由浅入深

原创
作者头像
QGS
发布于 2024-01-12 12:36:35
发布于 2024-01-12 12:36:35
64900
代码可运行
举报
文章被收录于专栏:QGS星球QGS星球
运行总次数:0
代码可运行

环境介绍

技术栈

springboot3+easyexcel

软件

版本

IDEA

IntelliJ IDEA 2022.2.1

JDK

17

Spring Boot

3

EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。

他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。

EasyExcel

Sheet工作簿

Row,行,索引从0开始

Column,列,索引从0开始

Cell,单元格

Read

Read1

代码语言:java
AI代码解释
复制
List<Corrdinate> newlist =new ArrayList<>();
String fileName="C:\\Users\\Administrator\\Desktop\\demofile\\坐标测试.xlsx";
EasyExcel.read(fileName, Corrdinate.class, new ReadListener<Corrdinate>() {
   @Override
   public void invoke(Corrdinate corrdinate, AnalysisContext analysisContext) {
      try {
         if (113<=Double.parseDouble(corrdinate.getX()) && Double.parseDouble(corrdinate.getX())<115
               && 22<=Double.parseDouble(corrdinate.getY()) && Double.parseDouble(corrdinate.getY())<24 ){
            corrdinate.setZ(true);
         }else {
            corrdinate.setZ(false);
         }
         newlist.add(corrdinate);
      }catch (Exception e){
         System.out.println(e);
         corrdinate.setDesc("类型转换失败");
         newlist.add(corrdinate);
      }


   }
   @Override
   public void doAfterAllAnalysed(AnalysisContext analysisContext) {
      System.out.println("读取完成");
   }
}).sheet().doRead();
Read2
String fileName="C:\\Users\\Administrator\\Desktop\\demofile\\坐标测试.xlsx";
EasyExcel.read(fileName, Corrdinate.class,new PageReadListener<Corrdinate>(corrdinates -> {
   for (Corrdinate corrdinate : corrdinates) {
      try {
         if (113<=Double.parseDouble(corrdinate.getX()) && Double.parseDouble(corrdinate.getX())<115
               && 22<=Double.parseDouble(corrdinate.getY()) && Double.parseDouble(corrdinate.getY())<24 ){
            corrdinate.setZ(true);
         }else {
            corrdinate.setZ(false);
         }
         newlist.add(corrdinate);
      }catch (Exception e){
         System.out.println(e);
         corrdinate.setDesc("类型转换失败");
         newlist.add(corrdinate);
      }
   }
})).sheet().doRead();

异常处理

重写onException方法

代码语言:java
AI代码解释
复制
@Test
void readException() {
   List<Corrdinate> oldlist =new ArrayList<>();
   List<Corrdinate> newlist =new ArrayList<>();
   String fileName="C:\\Users\\Administrator\\Desktop\\坐标测试.xlsx";
   EasyExcel.read(fileName, Corrdinate.class, new ReadListener<Corrdinate>() {
      @Override
      public void invoke(Corrdinate corrdinate, AnalysisContext analysisContext) {
            if (113<=Double.parseDouble(corrdinate.getX()) && Double.parseDouble(corrdinate.getX())<115
                  && 22<=Double.parseDouble(corrdinate.getY()) && Double.parseDouble(corrdinate.getY())<24 ){
               corrdinate.setZ(true);
            }else {
               corrdinate.setZ(false);
            }
            newlist.add(corrdinate);
      }
      @Override
      public void doAfterAllAnalysed(AnalysisContext analysisContext) {
         System.out.println("读取完成");
      }
      @Override
      public void onException(Exception exception, AnalysisContext context) throws Exception {
         System.out.println(exception);
      }
   }).sheet().doRead();
   for (Corrdinate corrdinate : newlist) {
      System.out.println(corrdinate.toString());
   }
}

try- catch

代码语言:java
AI代码解释
复制
@Test
void read1() {
   List<Corrdinate> oldlist =new ArrayList<>();
   List<Corrdinate> newlist =new ArrayList<>();
   String fileName="C:\\Users\\Administrator\\Desktop\\测试.xlsx";
   EasyExcel.read(fileName, Corrdinate.class, new ReadListener<Corrdinate>() {
      @Override
      public void invoke(Corrdinate corrdinate, AnalysisContext analysisContext) {
         try {
            if (113<=Double.parseDouble(corrdinate.getX()) && Double.parseDouble(corrdinate.getX())<115
                  && 22<=Double.parseDouble(corrdinate.getY()) && Double.parseDouble(corrdinate.getY())<24 ){
               corrdinate.setZ(true);
            }else {
               corrdinate.setZ(false);
            }
            newlist.add(corrdinate);
         }catch (Exception e){
            System.out.println(e);
            corrdinate.setDesc("类型转换失败");
            newlist.add(corrdinate);
         }
      }
      @Override
      public void doAfterAllAnalysed(AnalysisContext analysisContext) {
         System.out.println("读取完成");
      }

   }).sheet().doRead();

   for (Corrdinate corrdinate : newlist) {
      System.out.println(corrdinate.toString());
   }
}

读sheet

读所有工作簿

代码语言:java
AI代码解释
复制
@Test
void readManyShoot() {
   String fileName="C:\\Users\\Administrator\\Desktop\\demofile\\坐标测试.xlsx";
   EasyExcel.read(fileName, Corrdinate.class,new PageReadListener<>(corrdinates -> {
      corrdinates.forEach(System.out::println);
   })).doReadAll();
}

读任意工作簿

代码语言:java
AI代码解释
复制
@Test
void readAppointSheet() {
   try (ExcelReader excelReader = EasyExcel.read("C:\\Users\\Administrator\\Desktop\\demofile\\坐标测试.xlsx").build();){
      //创建工作簿对象sheet1
      ReadSheet sheet1 = EasyExcel.readSheet(0).head(Corrdinate.class)
            .registerReadListener(new PageReadListener<>(corrdinates -> {
               corrdinates.forEach(System.out::println);
            }
            )).build();
      //创建工作簿对象sheet2
      ReadSheet sheet2 = EasyExcel.readSheet("Sheet2").head(Corrdinate.class)
            .registerReadListener(new PageReadListener<>(corrdinates -> {
               corrdinates.forEach(System.out::println);
            }
            )).build();
      excelReader.read(sheet1,sheet2);
   }
}

自定义格式转换 日期,数字-Read

代码语言:java
AI代码解释
复制
@Data
public class man {
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("日期")
    @DateTimeFormat("yyyy年mm月dd日")
    private Date date;
    @ExcelProperty("成功率")
    private BigDecimal successrate;
}

自定义转换器-Read

代码语言:java
AI代码解释
复制
public class StringConverterString implements Converter<String> {
    //支持java类型
    @Override
    public Class<?> supportJavaTypeKey() {
        return String.class;
    }
    //支持Excel单元格类型
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    //读的数据符合类型
    @Override
    public String convertToJavaData(ReadConverterContext<?> context) throws Exception {
        //转换
        return "姓名:"+context.getReadCellData().getStringValue();
    }
    //写的数据符合类型
    @Override
    public WriteCellData<?> convertToExcelData(WriteConverterContext<String> context) throws Exception {
        return new WriteCellData<>(context.getValue());
    }
}

代码语言:java
AI代码解释
复制
@Data
public class man {
    @ExcelProperty(converter = StringConverterString.class)
    private String name;
    @ExcelProperty("日期")
    @DateTimeFormat("yyyy年mm月dd日")
    private Date date;
    @ExcelProperty("成功率")
    private BigDecimal successrate;
}

读指定行

EasyExcel默认从第一行开始读取,第0行默认为列头

代码语言:java
AI代码解释
复制
@Test
void selectRead(){
   String fileName="C:\\Users\\Administrator\\Desktop\\demofile\\坐标测试.xlsx";
   EasyExcel.read(fileName, man.class,new PageReadListener<>(mans -> {
      mans.forEach(System.out::println);
   })).sheet("Sheet3")
         .headRowNumber(2)//第几行,0-n
         .doRead();
}

Write

实体类

代码语言:java
AI代码解释
复制
@Data
public class Corrdinate {
    private long id;
    @ExcelProperty("x")
    private String x;
    private String y;
    @ExcelProperty("是否匹配")
    private boolean z;
    @ExcelProperty("描述")
    private String desc;
    @ExcelIgnore//忽略字段
    private String de;
}

Write1

代码语言:java
AI代码解释
复制
//生成数据方法
private List<Corrdinate> getData(int count) {

   List<Corrdinate> list = ListUtils.newArrayList();

   for (int i = 0; i < count; i++) {

      Corrdinate corrdinate = new Corrdinate();
      //生成10-100随机数
      corrdinate.setId(RandomUtil.randomInt(10, 100));
      corrdinate.setX(String.valueOf(RandomUtil.randomInt(10, 100)));
      corrdinate.setY(String.valueOf(RandomUtil.randomInt(10, 100)));
      list.add(corrdinate);
   }
   return list;
}

@Test
void write1(){
EasyExcel.write("C:\\Users\\Administrator\\Desktop\\demofile\\test01.xlsx", Corrdinate.class)
      .sheet()//指定工作簿
 

Write2

代码语言:java
AI代码解释
复制
//生成数据方法
private List<Corrdinate> getData(int count) {

   List<Corrdinate> list = ListUtils.newArrayList();

   for (int i = 0; i < count; i++) {

      Corrdinate corrdinate = new Corrdinate();

      corrdinate.setId(Long.parseLong(String.valueOf(RandomUtil.randomInt(10, 100))));
      //生成10-100随机数
      corrdinate.setX(String.valueOf(RandomUtil.randomInt(10, 100)));
      corrdinate.setY(String.valueOf(RandomUtil.randomInt(10, 100)));
      //随机生成MD5
      corrdinate.setDesc(DigestUtils.md5Hex("hello"));
      list.add(corrdinate);
   }
   return list;
}
@Test
void write2(){
   try (ExcelWriter excelWriter = EasyExcel.write("C:\\Users\\Administrator\\Desktop\\demofile\\test01.xlsx", Corrdinate.class).build();){
      WriteSheet sheet2 = EasyExcel.writerSheet("Sheet2").build();
      WriteSheet sheet1 =EasyExcel.writerSheet("Sheet1").build();

      excelWriter.write(getData(10),sheet1);
      excelWriter.write(getData(10),sheet2);
   }

写入指定列

实体类

代码语言:java
AI代码解释
复制
@Data
public class Corrdinate {
    private long id;
    @ExcelProperty(value = "x",index = 1)//指定列名和顺序
    private String x;
    private String y;
    @ExcelProperty("是否匹配")
    private boolean z;
    @ExcelProperty("描述")
    private String desc;
    @ExcelIgnore//忽略字段
    private String de;
}

生成数据方法

代码语言:java
AI代码解释
复制
//生成数据方法
private List<Corrdinate> getData(int count) {

   List<Corrdinate> list = ListUtils.newArrayList();

   for (int i = 0; i < count; i++) {

      Corrdinate corrdinate = new Corrdinate();

      corrdinate.setId(Long.parseLong(String.valueOf(RandomUtil.randomInt(10, 100))));
      //生成10-100随机数
      corrdinate.setX(String.valueOf(RandomUtil.randomInt(10, 100)));
      corrdinate.setY(String.valueOf(RandomUtil.randomInt(10, 100)));
      //随机生成MD5
      corrdinate.setDesc(DigestUtils.md5Hex("hello"));
      corrdinate.setDe(DigestUtils.md5Hex("de"));
      list.add(corrdinate);
   }
   return list;
}

写测试

代码语言:java
AI代码解释
复制
@Test
void writeColumn(){
   Set<String> set = new TreeSet<>();
   set.add("de");

   EasyExcel.write("C:\\Users\\Administrator\\Desktop\\demofile\\test01.xlsx", Corrdinate.class)
         .excludeColumnFieldNames(set)
         .sheet("Sheet2")//指定工作簿
         .doWrite(getData(10));//写入10个数据
}

多级列名

实体类

代码语言:java
AI代码解释
复制
@Data
public class Corrdinate {
    private long id;
    @ExcelProperty(value = "x",index = 1)//指定列名和顺序
    private String x;
    private String y;
    @ExcelProperty({"一级列名","是否匹配"})
    private boolean z;
    @ExcelProperty({"一级列名","描述"})
    private String desc;
    //@ExcelIgnore//忽略字段
    //设置一级列名,二级列名
    @ExcelProperty({"一级列名","二级列名"})
    private String de;
}

写测试

代码语言:java
AI代码解释
复制
@Test
void writeDemo(){
   EasyExcel.write("C:\\Users\\Administrator\\Desktop\\demofile\\test01.xlsx", Corrdinate.class)
         .sheet("Sheet3")//指定工作簿
         .doWrite(getData(10));//写入10个数据
}

自定义格式转换 日期,数字-Write

实体类

代码语言:java
AI代码解释
复制
@Data
public class man {
    @ExcelProperty(converter = StringConverterString.class)
    private String name;
    @ExcelProperty("日期")
    @DateTimeFormat("yyyy年mm月dd日")
    private Date date;
   @NumberFormat("#.##%")
    private BigDecimal successrate;
}

生成数据并测试写入

代码语言:java
AI代码解释
复制
//生成数据方法
private List<Man> getData2(int count) {

   List<Man> list = ListUtils.newArrayList();

   for (int i = 0; i < count; i++) {

      Man m = new Man();
      m.setName("张三"+i);
      m.setSuccessrate(BigDecimal.valueOf(RandomUtil.randomDouble(0.0, 1)));
      m.setDate(new Date());

      list.add(m);
   }
   return list;
}

@Test
void writeDemo(){
   EasyExcel.write("C:\\Users\\Administrator\\Desktop\\demofile\\test01.xlsx", Man.class)
         .sheet("Sheet3")//指定工作簿
         .doWrite(getData2(10));//写入10个数据
}

自定义转换器-Write

自定义转换器

代码语言:java
AI代码解释
复制
public class StringConverterString implements Converter<String> {
    //支持java类型
    @Override
    public Class<?> supportJavaTypeKey() {
        return String.class;
    }
    //支持Excel单元格类型
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    //读的数据符合类型
    @Override
    public String convertToJavaData(ReadConverterContext<?> context) throws Exception {
        //转换
        return "姓名:"+context.getReadCellData().getStringValue();

    }
    //写的数据符合类型
    @Override
    public WriteCellData<?> convertToExcelData(WriteConverterContext<String> context) throws Exception {
        return new WriteCellData<>("写入数据"+context.getValue());
    }
}

生成数据并测试写入

代码语言:java
AI代码解释
复制
private List<Man> getData2(int count) {

   List<Man> list = ListUtils.newArrayList();

   for (int i = 0; i < count; i++) {

      Man m = new Man();
      m.setName("张三"+i);
      m.setSuccessrate(BigDecimal.valueOf(RandomUtil.randomDouble(0.0, 1)));
      m.setDate(new Date());

      list.add(m);
   }
   return list;
}

@Test
void writeDemo(){
   EasyExcel.write("C:\\Users\\Administrator\\Desktop\\demofile\\test01.xlsx", Man.class)
         .sheet("Sheet3")//指定工作簿
         .doWrite(getData2(10));//写入10个数据
}

指定列宽行高

代码语言:java
AI代码解释
复制
@Data
@HeadRowHeight(30)// 指定列头行高度
@ContentRowHeight(15)// 指定内容行高度
@ColumnWidth(12)//指定列宽
public class Man {
    @ExcelProperty(converter = StringConverterString.class)
    private String name;
    @ExcelProperty("日期")
    @DateTimeFormat("yyyy年mm月dd日")
    private Date date;
   @NumberFormat("#.##%")
    private BigDecimal successrate;
}

批量写入excel方法

编写实体类

代码语言:java
AI代码解释
复制
@TableName(value ="product")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product implements Serializable {
    /**
     * 序号
     */
    @TableId(type = IdType.AUTO)
    @ExcelProperty("序号")
    private Integer number;
    /**
     * 创建时间
     */
    @ExcelProperty("创建时间")
    private Date createtime;
    /**
     * 产品名称
     */
    @ExcelProperty("产品名称")
    private String productname;
    /**
     * 产品编号
     */
    @ExcelProperty("产品编号")
    private String productnumber;
    /**
     * 产品型号
     */
    @ExcelProperty("产品型号")
    private String manufacturer;
    /**
     * 产品位置
     */
    @ExcelProperty("产品位置")
    private String producepath;
    /**
     * 图片位置
     */
    @ExcelProperty("图片位置")
    private String imagepath;
    /**
     * 使用单位
     */
    @ExcelProperty("使用单位")
    private String unit;
    /**
     * 金额
     */
    @ExcelProperty("金额")
    private Integer money;
    /**
     * 入库时间
     */
    @ExcelProperty("入库时间")
    private Date intime;
    /**
     * 出库时间
     */
    @ExcelProperty("出库时间")
    private Date puttime;
    /**
     * 操作人
     */
    @ExcelProperty("操作人")
    private String operator;
    /**
     * 创建人
     */
    @ExcelProperty("创建人")
    private String createduser;
    /**
     * 备注
     */
    @ExcelProperty("备注")
    private String notes;
    /**
     * 产品数量
     */
    @ExcelProperty("产品数量")
    private Integer producedigit;
    /**
     * 产品单位
     */
    @ExcelProperty("产品单位")
    private String productunit;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}

代码语言:java
AI代码解释
复制
//重复多次写入(写到单个或者多个Sheet)
@Test
public void manyWrite() {
   // 方法1: 如果写到同一个sheet
   String fileName = "C:\\Users\\13631\\Desktop\\simpleWriteTest1702391756908.xlsx";
   // 这里 需要指定写用哪个class去写
   try (ExcelWriter excelWriter = EasyExcel.write(fileName, Product.class).build()) {
      // 这里注意 如果同一个sheet只要创建一次
      WriteSheet writeSheet = EasyExcel.writerSheet("测试").build();
      long star = System.currentTimeMillis();
      // 去调用写入,这里我调用了五次,实际使用时根据数据库分页的总的页数来
      for (int i = 0; i < 5; i++) {
         // 分页去数据库查询数据 这里可以去数据库查询每一页的数据
         List<Product> data = getData(1000);
         excelWriter.write(data, writeSheet);
      }
      long end = System.currentTimeMillis();
      System.out.println("耗时:" + (end - star)/1000 + "秒");
   }

自定义模板写入excel

填充单行

填充集合

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//根据模板填充数据
@Test
public void fillWrite() {
    // 方案2 分多次 填充 会使用文件缓存(省内存)
    String fileName = "C:\\Users\\13631\\Desktop\\模板写数据.xlsx";
    String templateFileName = "C:\\Users\\13631\\Desktop\\模板.xlsx";
    try (ExcelWriter excelWriter = EasyExcel.write(fileName).withTemplate(templateFileName).build()) {
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
        excelWriter.fill(getData2(100), writeSheet);
    }
}

填充效果

自定义监听器

1、实体类(如上述实体类)

2、自定义监听器

Invoke和doAfterAllAnalysed是必选的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyListener implements ReadListener<Product> {

    private TestMapper testMapper;
    private ArrayList<Product> list = new ArrayList<>();
    int sum=0;

    public MyListener(TestMapper testMapper) {
        this.testMapper = testMapper;
    }

    //每读一行,则调用该方法
    @Override
    public void invoke(Product product, AnalysisContext analysisContext) {
        sum++;
        list.add(product);
    }
    //每读完整个excel,则调用该方法
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("读取了"+sum+"行数据");
    }
}
代码语言:java
AI代码解释
复制
@Test
void contextLoads() {
    String fileName = "C:\\Users\\13631\\Desktop\\simpleWriteTest1702391756908.xlsx";
    // 这里默认每次会读取100条数据 然后返回过来 直接调用使用数据就行
    // 具体需要返回多少行可以在`PageReadListener`的构造函数设置
    ExcelReader reader = EasyExcel.read(fileName, Product.class, new MyListener(new TestMapper())).build();
    ReadSheet sheet = EasyExcel.readSheet().build();
    reader.read(sheet);
}

Web上传下载

web中的读(上传)

后端

//上传

代码语言:java
AI代码解释
复制
    @PostMapping("/upload")
    @ResponseBody
    public String upload(MultipartFile file) throws IOException {
        long start = System.currentTimeMillis();
        EasyExcel.read(file.getInputStream(), Product.class, new MyListener(productService)).sheet().doRead();
        long end = System.currentTimeMillis();
        System.out.println("耗时:"+(end-start)/1000+"秒");
        return "success";
    }

前端(vue2+Element)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<el-upload
  class="upload-demo"
  action="http://192.168.1.8:8007/excel/upload"
  :on-preview="handlePreview"
  :on-remove="handleRemove"
  :before-remove="beforeRemove"
  multiple
  :limit="3"
  :on-exceed="handleExceed"
  :file-list="fileList">
  <el-button size="small" type="primary">点击上传</el-button>
</el-upload>

效果

web中的写(下载)

后端

代码语言:java
AI代码解释
复制
@GetMapping("download")
public void download(HttpServletResponse response) throws IOException {
    // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setCharacterEncoding("utf-8");
    // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
    String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
    response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
    EasyExcel.write(response.getOutputStream(), Product.class).sheet("模板").doWrite(productService.list());
}

前端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button @click="download">导出Excel</button>
methods:{
    download(){
      document.location.href="http://192.168.1.8:8007/excel/download";
    }
  },

效果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
什么是去中心化身份(DID),为什么你应该关心它?
使用电子商务进行网上购物,使用社交网络交流,使用电子邮件进行工作沟通--这样的例子不胜枚举。
Tiny熊
2022/11/07
1.4K0
什么是去中心化身份(DID),为什么你应该关心它?
去中心化身份如何将我们从元宇宙的数据监控中拯救出来?
在上一篇《元宇宙也存在数据被监控的风险吗?》中,我们提到元宇宙中依然存在数据监控的问题。想要解决此问题,则需要从道德层面与技术层面双管齐下。
本体Ontology
2022/08/31
8080
去中心化身份如何将我们从元宇宙的数据监控中拯救出来?
Web3.0 中的去中心化身份
在我们的日常生活中,我们经常与不同的身份进行交互,例如电子邮件地址、社交媒体帐户、护照等。这些数据通常存储在集中式服务器中并由第三方公司控制,因此身份所有者无法控制这些信息。更糟糕的是,如果组织禁止所有者访问其服务或组织不复存在,则存储的数据将被淘汰。
飞机号dapp119
2022/11/10
5850
Web3.0 中的去中心化身份
【区块链应用】-“通往web3的护照”-“DID”
波卡的联合创始人Robert Habermeier投资波卡生态去中心化身份聚器Litentry项目的消息开始在坊间传开,大家开始注意到这个“冷门领域”——去中心化身份(DID)。
帆说区块链
2022/08/30
5780
【区块链应用】-“通往web3的护照”-“DID”
Play-to-Earn!关于去中心化身份与GameFi的思考
在过去的几年里,游戏行业经历了令人难以置信的增长,2020年比前一年扩张了23%,与此同时,游戏行业与区块链的集成见证了“Play-to-Earn”的大热。
本体Ontology
2022/04/28
2850
Play-to-Earn!关于去中心化身份与GameFi的思考
深入理解去中心化身份DID (Decentralized ID)
用户首先生成一个公私钥对,然后将公钥和其他身份信息一起打包,形成一个 DID 文档。这个文档会被存储在一个去中心化的网络(如区块链)上,并且会被赋予一个唯一的 DID。用户可以使用他们的私钥对这个 DID 进行控制,例如更新或撤销。
KunkkaWu
2024/04/02
5.7K0
[译]揭开数字身份的神秘面纱(2/2)
本系列共分两部分,旨在帮助你分解数字应用程序、服务或产品的身份,特别是对去中心化架构和可互操作的web。其目的是将一个模糊的主题具体化,将一个大问题具体化,将一个困难而空洞的领域简单化分析。第一部分[4]分析了身份在数字产品中的作用。我们讨论了身份的社会和技术定义,它应该给你的产品带来的价值,以及不完整的身份解决方案的缺陷。
Tiny熊
2020/09/22
6430
《金融分布式数字身份技术研究报告》发布
在万物互联的时代背景下,金融科技发展正在加速重构金融业务新版图。网络数字化时代,数字身份作为网络安全的基石,既是物理世界主体在网络世界的映射,也是各主体在网络世界活动的基础。为此,北京金融科技产业联盟依托区块链专业委员会,联合金融机构、区块链领域权威科技公司及高等院校等共同开展分布式数字身份技术在金融领域的应用研究工作,形成《报告》。
bengbengsu
2022/04/26
9690
《金融分布式数字身份技术研究报告》发布
本体行业观点 | 去中心化身份DID如何推进加密技术发展?
注:本文发表于知名区块链新闻媒体平台 The Defiant ,作者 Humpty Calderon 为 Ontology 社区主管。
本体Ontology
2021/10/26
6240
Web3 的身份问题:去中心化身份的需求
身份应该是 Web3 中的一个主要问题,因为它涉及拥有它的个人以及他们与空间中其他利益相关者的互动。此外,对于像 DeFi 这样的空间,大规模采用取决于创建无缝的身份验证过程。本文探讨了去中心化身份 (DID)、围绕这一现象的好处和问题,以及建立在愿景之上的品牌。
飞机号dapp119
2022/11/18
5100
Web3 的身份问题:去中心化身份的需求
基于区块链的数字身份认证:重塑身份安全的新范式
随着互联网的普及与数字化进程的加快,数字身份认证已成为现代社会不可或缺的一部分。从登录社交媒体账户到在线银行交易,身份认证贯穿我们的日常生活。然而,传统的身份认证系统面临数据泄露、身份冒用等安全问题,越来越难以满足现代社会对隐私与安全的高要求。基于区块链的数字身份认证应运而生,为身份认证提供了一种去中心化、安全性强且透明的解决方案。
Echo_Wish
2025/01/19
5040
基于区块链的数字身份认证:重塑身份安全的新范式
本体技术视点 | 自主主权身份的一些思考(下)
https://coinmarketcap.com/alexandria/article/a-guide-to-self-sovereign-identity-a-deep-dive-by-ontology
本体Ontology
2021/05/07
3690
本体技术视点 | 当微软的去中心化身份梦想照进现实(下)
上一期,我们分享了全球科技巨头微软(Microsoft)在去中心化身份领域的实践,初步介绍了其“Azure Active Directory 可验证凭证”技术,在英国 NHS(National Health Service,国家卫生服务局) 试点中,一名医生从进入医院开始注册到救死扶伤仅需要5分钟的时间。
本体Ontology
2021/03/26
5060
本体技术视点 | 当微软的去中心化身份梦想照进现实(下)
DPKI的崛起之路——分布式数字身份(DID)
互联网的出现和普及使得传统身份有了另一种表现形式,即数字身份,除自然人以外,机构组织、智能设备、虚拟网络都可以作为实体并拥有数字身份,这些实体作为数字化社会的重要组成部分,共同构建了数字生态,数字社会身份体系如下图所示。
绿盟科技研究通讯
2022/06/06
2.5K0
DPKI的崛起之路——分布式数字身份(DID)
本体技术视点 | 当去中心化身份遇上智能汽车(下)
视频中演示了 Daphne 驾驶应用本体解决方案的汽车,使用面部识别功能启程,使用数字资产支付,用大数据分析突发路况,通过本体信用分判断是否共享,发起路权申请避开拥堵,在应用内完成云端理赔,实现车辆生命周期的系统管理。
本体Ontology
2020/09/08
3540
ERC-1484简述
在区块链世界中,身份管理一直是核心挑战之一。传统互联网通过中心化平台(如社交媒体账号)来管理用户身份,而区块链的匿名性反而加剧了身份验证和声誉构建的复杂性。
孟斯特
2025/04/27
670
ERC-1484简述
区块链与数字身份|一场沙龙看懂「数字身份」的机遇和挑战
近日,由腾讯云区块链主办的链上产业系列活动第三期成功举办,嘉宾围绕区块链与数字身份为主题,进行了三个小时的深入交流分享,精彩纷呈,干货满满。 现如今,数字身份的应用场景,已经从互联网线上身份认证逐渐延伸到线下各类应用场景中,而区块链将是数字身份方案的重要技术支持,两者如何碰撞?如何共生发展?这场沙龙给了我们答案,快来一起听听专家的洞察。 中关村区块链产业联盟产业研究负责人纪元在直播中带来题为《DID与未来数字世界》的分享,他就区块链与数字身份的关系,以及与数字经济的“链接”展开分享。 数字身份的价值是数字
bengbengsu
2022/09/28
2.1K0
区块链与数字身份|一场沙龙看懂「数字身份」的机遇和挑战
[译]揭开数字身份的神秘面纱(1/2)
身份一直以来都是一个挑战,不仅在去中心化技术中,在一般的在线应用中也是如此。具有挑战的地方在于,人们不清楚“身份”的含义,以及它在数字产品、服务和网络中的多种形式。这是构建者经常感到困惑和沮丧的原因,导致许多人避免处理身份 ID 或实现短期的变通方法。每种身份系统都会产生巨大的影响,随着产品的使用和成熟,身份系统的重要性和复杂性都在增长。
Tiny熊
2020/09/22
6180
详解通往Web3的护照——去中心化身份DID
互联网的创建没有为人们提供本地身份验证层。由此,数字身份问题被纳入网站和应用程序范畴。这种方法可能适用于互联网的早期阶段,但现在线上有数十亿人,但缺点正变得越来越明显。用户名和密码仍占主导地位,尽管这被反复证明是不安全的模型。普通人必须反复于70到80个密码之间,导致用户体验明显较差。毕竟有价值数百万美元的企业是围绕帮助企业和个人管理其分散的账户及密码而建立的,例如Okta、1Password和Dashlane。最重要的是,用户实际上并不真正拥有他们的线上身份。正好相反,这是从公司等实体那里租用的。因此,他们很容易面临其数字身份被黑客入侵、操纵或完全丢失的风险。
用户9329036
2022/03/07
1.1K0
详解通往Web3的护照——去中心化身份DID
本体技术视点 | 去中心化身份解决方案简介(上)
上一期我们分享了本体创始人 Li Jun 的署名文章 本体行业观点 | DeFi需要可靠的信用评分体系,但我们必须保持谨慎。其中谈到:“DeFi 行业所欠缺的是一种信用评分系统,任何适用于 DeFi 借贷的去中心化信用评分系统都需要将用户的隐私和安全放在首位”等核心观点。
本体Ontology
2021/05/07
4090
推荐阅读
相关推荐
什么是去中心化身份(DID),为什么你应该关心它?
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • EasyExcel
    • Read
      • Read1
      • 异常处理
      • try- catch
      • 读sheet
      • 自定义格式转换 日期,数字-Read
      • 自定义转换器-Read
      • 读指定行
    • Write
      • Write1
      • Write2
      • 写入指定列
      • 多级列名
      • 自定义格式转换 日期,数字-Write
      • 自定义转换器-Write
      • 指定列宽行高
      • 批量写入excel方法
      • 自定义模板写入excel
      • 自定义监听器
    • Web上传下载
      • 后端
      • 前端(vue2+Element)
    • web中的写(下载)
      • 后端
      • 前端
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档