头像上传与使用POI导入导出文件列表

若依框架安全攻防实战:从SRC视角剖析高频漏洞与加固方案 在Spring Boot企业级应用开发中,权限控制、会话管理和输入校验是保障系统安全的核心机制。其原理在于通过注解(如@PreAuthorize)实现方法级访问控制,利用JWT或Redis管理身份令牌的生命周期,并借助验证框架对用户输入进行约束。这些技术的价值在于构建纵深防御体系,防止未授权访问、身份冒用和数据篡改,广泛应用于管理后台、OA系统等场景。若依(RuoYi)作为基于Spring Boot的流行快速开发框架,其高度普及性使得针对其的漏洞挖掘成为安全研究的重点。本文聚焦于若依框架中因配置疏忽和常见误 阅读详情

一、头像上传

JSP页面

<span style="font-size:18px;">private File headImage;
private String headImageFileName;//文件上传时,这两个变量的命名格式是固定的,都是 文件+FileName
private String headImageContentType;//文件+ContentType,随便改的话就会报错找不到 sourceEntities,实体源 </span>
注意:还要提供get和set方法
	<span style="font-size:18px;">//添加到数据库
	public String add(){
		
		try {
			if(user!=null){
				//处理头像
				if(headImage!=null){
						//1.保存头像到upload/user
						//获取保存路径的绝对地址
						String filePath = ServletActionContext.getServletContext().getRealPath("upload/user");
						//重新给其一个名字
						String fileName=UUID.randomUUID().toString().replaceAll("-", "")
								+headImageFileName.substring(headImageFileName.lastIndexOf("."));//从点最后一次出现的位置截取,即后缀名
						//复制文件
						FileUtils.copyFile(headImage, new File(filePath,fileName));
						//2.设置用户头像路径
						user.setHeadImage("user/"+fileName);
					
				}
				//保存用户及其对应的角色
				userService.saveUserAndRole(user,userRoleIds);
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
		
		return "list";
	}</span>
在更新用户的方法中,也需要重写上传头像的方法,因为用户是可能更换头像的。

<span style="color:#000000;">//修改
	public String edit(){
		try {
			if(user!=null){
				//处理头像
				if(headImage!=null){//如果修改了头像,就执行
					//1.保存头像到upload/user
					//获取保存路径的绝对地址
					String filePath = ServletActionContext.getServletContext().getRealPath("upload/user");
					//重新给其一个名字
					String fileName=UUID.randomUUID().toString().replaceAll("-", "")
							+headImageFileName.substring(headImageFileName.lastIndexOf("."));
					//复制文件
					FileUtils.copyFile(headImage, new File(filePath,fileName));
					//2.设置用户头像路径
					user.setHeadImage("user/"+fileName);
				
				}
				userService.updateUserAndRole(user,userRoleIds);
			}</span>
数据库中存储的不过是图片的路径罢了。

当然Struts2的上传文件支持的jar包也是不可少的。

二、使用POI导入导出文件列表

差点忘了准备工作,导入相关jar包:

下载完后,打开“poi-bin-3.10.1-20140818”获取操作excel需要的jar包,并将这些jar包复制到项目中。对于只操作2003 及以前版本的excel,只需要poi-3.10.1-20140818.jar,如果需要同时对2007及以后版本进行操作则需要复制

poi-ooxml-3.10.1-20140818.jar,

poi-ooxml-schemas-3.10.1-20140818.jar,以及复制在ooxml-lib目录下的xmlbeans-2.6.0.jar,dom4j-1.6.1.jar。


1.导出用户列表为Excel格式的文件,03版本后缀名是xls,07版本以后xlsx


//导出用户列表,action层
	public void exportExcel(){
		try {
			//获取用户列表
			HttpServletResponse response = ServletActionContext.getResponse();
			//设置内容的类型
			response.setContentType("application/x-excel");
			//告诉浏览器是附件以及附件的名字,设置请求头
			response.setHeader("Content-Disposition",
					"acttachment;filename="
							+new String("用户列表.xls".getBytes(),"ISO-8859-1"));//防止中文乱码,固定为xls03版本,是为了适用所有用户
			//获取输出流
			ServletOutputStream outputStream = response.getOutputStream();
			userService.exportExcel(userService.findObjects(),outputStream);
			//要先判断不为空时再关,否则会报空指针异常
			if(outputStream!=null){
				outputStream.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
2.导入Excel格式的文件并自动生成用户列表,本质是添加到数据库在表现层遍历。

//导入Excel文件
	public String importExcel(){
		//1获取Excel文件
		if(userExcel!=null){
			//判断是否是excel
			if(userExcelFileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){
				//导入
				userService.importExcel(userExcel,userExcelFileName);
			}
		}
		
		return "list";
	}

public void exportExcel(List<User> userList, ServletOutputStream outputStream) {
		
		ExcelUtils.exportUserExcel(userList, outputStream);
	}

	@Override
	public void importExcel(File userExcel, String userExcelFileName) {
		try {
			FileInputStream fis=new FileInputStream(userExcel);
			//通过判断,决定读取那种工作薄
			boolean is03Excel=userExcelFileName.matches("^.+\\.(?i)(xls)$");//  \\转义点    ?i 表示  忽略大小写    
			Workbook workbook=is03Excel? new HSSFWorkbook(fis):new XSSFWorkbook(fis) ;
			//读取表
			Sheet sheet = workbook.getSheetAt(0);//读取第一个表
			//读取行,表的有效行数
			if(sheet.getPhysicalNumberOfRows()>2){
				User user=null;
				for(int i=2;i<sheet.getPhysicalNumberOfRows();i++){
					//读取单元格
					Row row = sheet.getRow(i);
					user=new User();
					//用户名
				String	name=row.getCell(0).getStringCellValue();
				user.setName(name);
					//账号
				String account =row.getCell(1).getStringCellValue();
				user.setAccount(account);
					//所属部门
				String dept=row.getCell(2).getStringCellValue();
				user.setDept(dept);
					//性别
				Cell cell3=	row.getCell(3);
				user.setGender(cell3.getStringCellValue().equals("男"));// equals()方法 返回值为boolean ,刚好 男  对应着  true ,女  false
					//手机号码
				String phone="";
				Cell cell4 = row.getCell(4);
				try {
					phone=cell4.getStringCellValue();
				} catch (Exception e) {
					double dphone=cell4.getNumericCellValue();
					phone=BigDecimal.valueOf(dphone).toString();
				}
				user.setPhone(phone);
					//电子邮箱
				String email=row.getCell(5).getStringCellValue();
				user.setEmail(email);
						//生日
					if(row.getCell(6).getDateCellValue()!=null){
						user.setBirthday(row.getCell(6).getDateCellValue());
					}
					//設置默認密碼為123456
					user.setPassword("123456");
					//默认用户状态为 有效
					user.setState(User.USER_STATE_VALID);
					//保存用戶,到数据库
					userDao.save(user);
				}
			}
			//关闭资源  和输入流
			workbook.close();
			fis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}


核心方法是自建的工具类ExcelUtils.java,再在service层引用其方法即完成导出用户列表。

 

package cn.sp.core.util;

import java.util.List;

import javax.servlet.ServletOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;

import cn.sp.nsfw.user.bean.User;
/**
 * Excel工具类
 * @author 石鹏大神
 *
 */
public class ExcelUtils {
	/**
	 * 导出用户列表到指定的Excel文件
	 * @param userList 数据库中查出的用户列表信息
	 * @param outputStream  向游览器输出的输出流
	 */
	public  static void exportUserExcel(List<User> userList, ServletOutputStream outputStream) {
		
		try {
			//1.创建工作薄
			HSSFWorkbook workbook=new HSSFWorkbook();
			//1.1创建合并单元格对象
			CellRangeAddress cellRangeAddress=new CellRangeAddress(0,0,0,4);//其实行,最终行,起始列,最终列
			//1.2头标题样式
			HSSFCellStyle style1 = createCellStyle(workbook,(short)16);//这里的数字是 字体大小
			//1.3、列标题样式
			HSSFCellStyle style2 = createCellStyle(workbook,(short)13);
			//2.创建工作表
			HSSFSheet sheet = workbook.createSheet("用户列表");//传入一个工作表名
			//2.1、加载合并单元格对象
			sheet.addMergedRegion(cellRangeAddress);
			//设置默认列宽
			sheet.setDefaultColumnWidth(25);
			//3.创建行
			//3.1、创建头标题行;并且设置头标题
			HSSFRow row1 = sheet.createRow(0);
			HSSFCell cell1 = row1.createCell(0);//合并后的单元格为一个整体,看作为一个单元格
			//加载单元格样式并设置值
			cell1.setCellStyle(style1);
			cell1.setCellValue("用户列表");
			
			//3.2、创建列标题行;并且设置列标题
			HSSFRow row2 = sheet.createRow(1);
			String[] title={"用户名","账号","所属部门","性别","电子邮箱"};
			//依次创建单元格,加载样式,设置值
			for(int i=0;i<title.length;i++){
				HSSFCell cell = row2.createCell(i);
				
				cell.setCellStyle(style2);
				cell.setCellValue(title[i]);
			}
			
			/**************开始正式内容***************/
			//4、操作单元格;将用户列表写入excel
			if(userList!=null){
				for(int j=0;j<userList.size();j++){//每遍历一次就是一行,一个用户也对应一行
					HSSFRow rows = sheet.createRow(j+2);
					//用户名
					HSSFCell cell0 = rows.createCell(0);
					cell0.setCellValue(userList.get(j).getName());
					//账号
					HSSFCell cell11 = rows.createCell(1);
					cell11.setCellValue(userList.get(j).getAccount());
					//所属部门
					HSSFCell cell22 = rows.createCell(2);
					cell22.setCellValue(userList.get(j).getDept());
					//性别
					HSSFCell cell33 = rows.createCell(3);
					cell33.setCellValue(userList.get(j).isGender()? "男":"女");
					//电子邮箱
					HSSFCell cell44 = rows.createCell(4);
					cell44.setCellValue(userList.get(j).getEmail());
				}
			}
			
			//5.输出
			workbook.write(outputStream);
			//关闭资源
			workbook.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 创建单元格样式
	 * @param workbook 工作薄
	 * @param fontsize 字体大小
	 * @return
	 */
	private static HSSFCellStyle createCellStyle(HSSFWorkbook workbook, short fontsize) {
		//样式属于工作薄,由工作薄创建,应用于单元格
		HSSFCellStyle style = workbook.createCellStyle();
		//内容水平居中
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		//内容垂直居中
		style.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER);
		//创建字体
		HSSFFont font = workbook.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗字体
		font.setFontHeightInPoints(fontsize);//设置字体大小,
		//font.setFontHeight(fontsize);    这种只有输入参数的20分之一大小
		//加载字体
		style.setFont(font);
		return style;
	}
}


基于STM32F407ZGT6与INMP441的I2S音频采集系统:从配置到实时波形显示 本文详细介绍了基于STM32F407ZGT6与INMP441麦克风模块的I2S音频采集系统设计与实现。从硬件选型、CubeMX配置到音频数据处理和上位机波形显示,全面解析了系统架构、DMA传输优化及常见问题解决方案,帮助开发者快速构建高精度音频采集系统。 阅读详情

相关推荐

数据结构与算法 —— 最短路径Dijkstra算法(迪杰斯特拉)详细图解以及python实现

前两章我们讲到了关于图的基本知识,和广度/深度优先搜索。本章,我们将介绍加权图和最短路径的相关知识。最短路径和最小生成树是图论中常见的问题。最短路径是指在一个图中找到两个节点之间的最短路径,最小生成树是指在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。最短路径算法常见的有floyd算法(弗洛伊德算法)和 dijkstra算法(迪杰斯特拉)。本文只介绍dijkstra算法。最短路径运用非常广泛,比如在导航系统中,确定两个地点间哪条路线最短;

‘’ 2万+

用java实现Excel用户信息的导出

导出Excel大致有以下5个步骤: 1.创建一个excel文件工作薄;(HSSFWorkbook workbook = new HSSFWorkbook()) 2.创建一张表;HSSFSheet sheet = workbook.createSheet(“统计表”) 3.创建一行;HSSFRow row = sheet.createRow(0) 4.填充一列数据; row.createCell(0...

数据知道的博客 4529

一周涨十万星,GitHub 爆火的 REA 逆向工程到底是什么?

REA 这波热度里,我一直没太想明白的是它为什么火在 AI 圈而不是安全圈。同类的 MCP 工具早就在了,技术上也谈不上新,真正变的只有一件事:门槛。门槛一降,参与的人就从"会逆向的工程师"变成了"会打字的任何人"。这大概也是争议的根源。护城河这件事,多数报道的共识是它从"你看不到我的代码"挪到了"你拿不走我的服务能力和业务理解"。这话对不对,现在没人拿得出证据,只能等下一批真实案例。哪天有人拿 REA 把某个还在卖钱的闭源软件啃出可维护的工程,那个答案才算落地。

优快云zhizunbao的博客 1186

POI通用型excel上传下载

今天是2020.07.01先记录一下时间,因为后期我会逐步完善这个通用型poi包excel的上传下载。因为excel上传下载操作很多,每次都重新造轮子太麻烦也没必要,因此一个项目有一个通用的上传下载excel就好了。但是我这里的只能适应最普通版的excel上传读取即数据导出,设计exel格式,多行合并等等复杂的暂时没法使用。 开干: 第一步:导包 <!--poi--> <dependency> <groupId>org.apac

m0_37635053的博客 388

告别虚拟机!用ZYNQ7000和PYNQ 2.6.0打造一个能实时识别人脸的“智能摄像头”

本文详细介绍了如何利用Xilinx ZYNQ7000开发板和PYNQ 2.6.0框架构建实时人脸识别系统。通过硬件加速和嵌入式开发技术,该系统实现了低延迟、低功耗的独立运行能力,适用于边缘计算和物联网应用。文章包含从环境搭建到核心功能实现的完整指南,并提供了性能优化和问题排查的实用技巧。

weixin_42543046的博客 390

视觉开发板—K210自学笔记(三)--点亮LED

K210点亮LED灯

adamsecond 3412

使用POI工具包操作excel文件-上传下载

POI maven

站在墙头上的博客 179

Python与西门子PLC数据交互实战:基于Snap7的跨平台工业通信指南

本文详细介绍了如何使用Python和Snap7库实现与西门子PLC的数据交互。内容涵盖跨平台环境搭建、连接参数配置、数据读写实战及性能优化技巧,为工业自动化、数据采集和智能制造场景提供了一套轻量、灵活且高效的通信解决方案。

vim8coder的博客 283

POI 实现 Excel 文件上传下载及大数据导出处理

Java 中操作 Excel 的有两种比较主流的工具包: JXL 和 POI 。JXL 只能操作 Excel 95、97、2000 等老版本格式数据,也即以 .xls 为后缀的 excel。而 POI 可以操作 Excel 95 及以后的版本,即可操作后缀为 .xls 和 .xlsx 两种格式的 Excel。POI 全称 Poor Obfuscation Implementation,利用 POI...

qq_30298851的博客 958

ollama服务暴露公网?三步搞定Nginx反向代理配置(避坑指南)

本文详细介绍了如何通过Nginx反向代理安全地将Ollama服务暴露到公网,避免直接修改OLLAMA_HOST带来的安全隐患。文章提供了从SSL证书部署到高级安全加固的全流程实战指南,包括IP白名单、基础认证、速率限制等企业级安全措施,帮助用户实现安全可靠的外部访问。

wood5的博客 177

YOLO11改进|YOLO11中引入注意力和卷积融合模块CAFMAttention

YOLO11改进|YOLO11中引入注意力和卷积融合模块CAFMAttention

A1983Z的博客 1219

POI批量导入及一键上传ocupload和pinyin4j组件的使用案例

主要讲解四点: 快递员批量作废功能(重点,本质上是快递员的批量修改操作) 一键上传、POI解析Excel、pinyin4j(会用) 代码重构:优化模型驱动和优化分页代码(理解) 定区添加、带条件分页查询(重点) 一、快递员作废datagrid的formatter使用(重要) 1、作废:逻辑删除,就是给某条记录打上标记 Courier数据表d...

学亮编程手记 841

vLLM专题(七)-支持的模型列表

vLLM支持跨多种任务的生成式和池化模型。如果一个模型支持多个任务,您可以通过–task参数来设置任务。对于每个任务,我们列出了已在vLLM中实现的模型架构。每个架构旁边,我们列出了一些使用该架构的流行模型。

1258

Springboot——使用poi实现excel动态图片导入解析

最近要实现一个导入导出的功能点,需要能将带图片的列表数据导出到excel中,且可以导入带图片的excel列表数据。考虑到低代码平台的表头与数据的不确定性,技术框架上暂定使用Apache-POI。

专注写bug 1433

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

使用SpringBoot和MyBatis实现学生管理

文章目录学生管理接口学生管理页面(html)学生管理页面(js)github项目地址参考资料 学生管理接口 package com.yangzc.studentboot.student.controller; import com.yangzc.studentboot.common.annotation.ApiJsonObject; import com.yangzc.studentboot....

勇敢的兵 2735

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

基于javaweb的学生考勤管理系统(java+SSM+Poi导出+Easyui+JFreeChart+maven+mysql)

这个项目适合SSM框架的初学者(涉及大量增删改查,很适合初学者)以及对Shiro安全框架和Poi技术感兴趣的同学。 项目功能: 用户管理功能(登录、退出登录、增加用户、编辑用户、删除用户、多条件查询用户、上传用户头像、修改个人密码);角色管理功能(添加角色、编辑角色、删除角色、查询角色);权限管理功能(添加权限、编辑权限、删除权限、多条件查询权限);缺勤管理功能(添加缺勤、编辑缺勤、删除缺勤、多条件查询缺勤、导出Excel、柱形图显示缺勤情况)。 应用技术:Jsp + SSM + Shiro + Poi(E

m0_71054991的博客 465

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

联系人管理系统 - Spring Boot + Vue 3 全栈开发实战

本项目是一个功能完善的联系人管理系统,采用前后端分离架构开发。系统实现了用户注册登录、联系人的增删改查、分组管理、标签管理、Excel导入导出、生日提醒等功能。后端:Spring Boot + MyBatis Plus + MySQL + JWT前端:Vue 3 + Element Plus + Vite + Pinia✅ 用户注册登录✅ 联系人增删改查✅ 分组管理✅ 标签管理✅ 生日提醒✅ Excel导入导出✅ 搜索功能✅ 分页功能✅ 响应式设计。

2502_91726075的博客 659

100万行Excel导出再也不怕OOM:Apache Fesod的流式读写实战指南

如果你的系统里跑过"导出报表"这类需求,多半经历过这样的夜晚:数据查出来了,List 装满了,内存报警了,程序崩溃了。Apache Fesod(Incubating)正是一款为这种场景而生的高性能 Java 电子表格读写库——它把"Fast. Easy. Done."写进了名字里,专门解决大规模 Excel 文件处理时的内存溢出(OOM)难题,让你不用再为百万行数据的导入导出寝食难安。 ## 一

gitblog_01012的博客 412

Springboot3+Vue3+MySQL 高校课程表智能管理系统源码实战前后端分离

基于 Spring Boot 3 + Vue 3 前后端分离架构的高校课程表智能管理系统,支持管理员、教师、学生三种角色。提供课程管理、教室管理、智能自动排课、课表多维度查询与 Excel 导出等功能。源码含完整前后端与数据库脚本,适合学习 Spring Boot 3 实战、Vue 3 前后端分离开发及课程设计二次开发。

kangxihuang的博客 154

Springboot3+Vue3+MySQL 小区人员出入登记管理系统源码前后端分离实战

基于 Spring Boot 3 + Vue 3 + MySQL 的小区人员出入登记管理系统,前后端分离架构,支持管理员、住户、工作人员三种角色。功能包括人脸识别出入登记、访客预约审批、考勤打卡、数据统计与可视化、Excel 批量导入导出、系统配置等。适合学习 Spring Boot 3 和 Vue 3 实战开发,可用于毕业设计或二次开发。

kangxihuang的博客 13

Spring Boot 3 + Vue 3 + MySQL 记账社区系统源码 前后端分离实战

爱流淌记账系统是一套基于 Spring Boot 3 + Vue 3 前后端分离架构的记账与社区管理平台。系统包含普通用户和管理员两大角色,支持账单管理、资产账户、预算预警、理财计划、社区帖子、评论互动、举报等功能,并配有万字文档和数据库脚本,适合学习 Spring Boot 3 + Vue 3 全栈开发的实战项目。

kangxihuang的博客 66

基于springboot2+vue2的医院资源管理系统

医院资源管理系统,旨在帮助医院实现信息化管理,涵盖用户管理、医生管理、药品管理、病史记录、住院管理、医生预约、公告信息等核心功能。系统面向三种角色:管理员、医生、普通用户,不同角色拥有不同的操作权限。

190

A111-基于SpringBoot+vue实现的教务管理系统(源码+文档+部署文档+包运行)

后端:SpringBoot2、Mysql、Hutool、Poi、Lombok、Mybatis/Mybatis-plus、swagger、JWT、Websocket、Redis、Alipay、Email。用户中心、用户注册、用户登录、找回密码、浏览首页、新闻搜索、 查看新闻明细、发布评论、报名考试、参与考试、提交考卷、进入后台。2. 专业管理:专业列表、专业信息的增删改查以及导入导出、分配专业的辅导员、分配专业的课程。1. 学生管理:学生列表、学生信息的增删改查以及导入导出、分配学生的专业和年级。

2401_86268542的博客 608

GitHub开源:一键生成前后端代码神器

JeecgBoot 是一款基于代码生成器的低代码开发平台,零代码开发。采用前后端分离架构:SpringBoot2.x,Ant Design&Vue,Mybatis-plus,Shiro,JWT。强大的代码生成器让前后端代码一键生成,无需写任何代码。

不脱发的程序猿 1万+

基于springboot2+vue3的医院挂号就诊系统

医院挂号就诊系统,基于Spring Boot + MyBatis-Plus + MySQL + Vue + layui等技术栈开发。系统主要面向三类角色:管理员、医生、用户(患者)。系统提供以下核心功能: 用户(患者)注册、登录、个人信息管理、余额充值。 医生管理:包括医生信息(姓名、科室、职位、职称、头像、联系方式、挂号价格、履历介绍等)的增删改查。 挂号管理:用户选择医生、时间类型(上午/下午)、挂号日期,生成就诊识别码,提交挂号申请。系统会校验用户余额,自动扣费,并生成审核记录。 健康教育:发布和管

201

这个开源项目有点强,无需编码,可一键生成前后端代码,中国移动java开发面试

看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面小编专门为你量身定制了一套针对知识面不够,也莫慌!还有一整套的,可以瞬间查漏补缺全都是一丢一丢的收集整理纯手打出来的。

2401_83977554的博客 518
上一篇: oracle数据库服务器01
下一篇: oracle数据库服务器02
2YSP
博客等级 码龄10年 12粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值