SpringBoot项目实现文件上传和邮件发送

Spring Boot参考教程(九)配置上传下载 7.配置上传下载 使用上传下载的功能我们需要配置multipartResolver,先启动工程,不做配置。 访问端点/beans: Spring Boot默认实例化了一个MultipartResolver(StandardServletMultipartResolver) 想要取消,配置:spring.servlet.multipart.enabled=false Stand 阅读详情

精选:★→2020年最新的常问企业面试题大全以及答案

前言

本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能。

SpringBoot 文件上传

说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码。

开发准备

环境要求

  • JDK:1.8

  • SpringBoot:1.5.9.RELEASE

首先还是Maven的相关依赖:

pom.xml文件如下:

  <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath />
    </parent>
    <dependencies>
        <!-- Spring Boot Web 依赖 核心 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring Boot Test 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
            <!-- Spring Boot thymeleaf 模板 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

然后就是application.properties的文件配置。

application.properties:

banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
server.port=8182

spring.http.multipart.maxFileSize=100Mb
spring.http.multipart.maxRequestSize=100Mb

filePath=F:/test/

注:其中spring.http.multipart.maxFileSize和spring.http.multipart.maxRequestSize是设置上传文件的大小,这里我设置的是100Mb,filePath是文件上传的路径,因为个人使用的是Windows系统,所以将路径设置在F:/test/。

代码编写

SpringBoot自身对于文件上传可以说是非常的友好了,只需要在控制层的参数中使用MultipartFile这个类,然后接受file类型的数据上传就可以了,至于将上传得到的文件如何处理就是我们开发者自己决定了。

首先我们先写一个前端界面,在界面上新增一个按钮用于上传文件。由于SpringBoot对thymeleaf的支持非常友好,所以这里我们就直接使用thymeleaf编写一个简单的界面,用于上传文件。

html代码如下:

<!DOCTYPE html>
<html>
  <head>
    <title>uploading.html</title>

    <meta name="keywords" content="keyword1,keyword2,keyword3"></meta>
    <meta name="description" content="this is my page"></meta>
    <meta name="content-type" content="text/html; charset=UTF-8"></meta>

  </head>

  <body>
  <form enctype="multipart/form-data" method="post" action="/uploading">
    <input type="file" name="file"/>
    <input type="submit" value="上传"/>
    </form>
  </body>
</html>

注: 如果不想编写前端界面的话,也可以通过Postman等工具实现。

Postman的操作方式为:

填写url路径,选择post方式 -> body 选择form-data 格式-> key选择file类型,选择文件,然后点击send就可以实现文件上传。

因为我们这里只进行文件上传,并不做其它的业务逻辑处理,因此我们只用在控制层实现即可。定义一个文件上传的接口,然后使用MultipartFile类进行接收即可。

代码如下:

@Controller
public class FileUploadController {

    @Value("${filePath}")
    private String filePath;

    @GetMapping("/upload")
    public String uploading() {
        //跳转到 templates 目录下的 uploading.html
        return "uploading";
    }

    //处理文件上传
    @PostMapping("/uploading")
    public @ResponseBody String uploading(@RequestParam("file") MultipartFile file,
            HttpServletRequest request) {
        try {
            uploadFile(file.getBytes(), filePath, file.getOriginalFilename());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("文件上传失败!");
            return "uploading failure";
        }
        System.out.println("文件上传成功!");
        return "uploading success";
    }



    public void  uploadFile(byte[] file, String filePath, String fileName) throws Exception { 
        File targetFile = new File(filePath);  
        if(!targetFile.exists()){    
            targetFile.mkdirs();    
        }       
        FileOutputStream out = new FileOutputStream(filePath+fileName);
        out.write(file);
        out.flush();
        out.close();
    }

}

注:上述的代码只是一个示例,实际的情况下请注意异常的处理!上述的流关闭理应放在finally中,实际为了方便才如此的编写。

App 入口

和普通的SpringBoot项目基本一样。

代码如下:

@SpringBootApplication
public class FileUploadApplication {

    public static void main(String[] args)  {
        SpringApplication.run(FileUploadApplication.class, args);
        System.out.println("FileUploadApplication 程序启动成功!");
    }
}

功能测试

我们成功启动该程序之后,在浏览器上输入:http://localhost:8182/upload,然后选择一个文件进行上传,最后我们再到F:/test/路径下查看是否有该文件。

示例图如下:

使用Postman上传的示例图:

最后说明一下,如果文件重复上传,后面上传的文件会替换掉之前的那个文件。


SpringBoot 邮件发送

说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码。

开发准备

环境要求

  • JDK:1.8

  • SpringBoot:1.5.9.RELEASE

首先还是Maven的相关依赖:

pom.xml文件如下:

  <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath />
    </parent>
    <dependencies>
        <!-- Spring Boot Web 依赖 核心 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring Boot Test 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
            <!-- Spring Boot thymeleaf 模板 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>

    </dependencies>

然后就是application.properties的文件配置,这里我们需要根据自己的实际情况进行填写。如下述的配置文件示例中,个人使用的是qq邮箱,因此spring.mail.host配置的是smtp.qq.com。

下述的示例中,只需填写个人邮箱的账号和密码即可。如果出现了535 错误,则需要该邮箱开启POP3/SMTP服务,并且使用授权码替换密码进行发送。

application.properties:

server.port = 8182
spring.mail.host=smtp.qq.com
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

代码编写

SpringBoot这块已经集成了mail邮件发送的功能,我们引入相关架包之后,只需使用JavaMailSender这个类中的send方法即可完成邮件的发送。如果还想发送静态资源和附件的邮件,在JavaMailSender这个类中的方法也可以实现。如果想使用自定义的模板内容发送的话,则需要使用TemplateEngine 该类中的方法。

在我们使用邮件发送的时候,这四样最为重要,发件人、收件人、发送主题和发送的消息。因此我们可以根据这四样来创建一个简答的邮件实体类,方便进行相关的业务处理。

实体类代码

代码如下:

public class Mail {

    /** 发送者*/
    private String sender;

    /** 接受者  */
    private String receiver;

    /** 主题 */
    private String subject;

    /** 发送 消息*/
    private String text;

    //getter 和 setter 略
}

这里我们还是定义接口来进行邮件的发送,我们发送邮件的时候依旧只需要知道发件人、收件人、发送主题和发送的消息这四点就可以了,其余的可以在代码中完成。这里我们就简单的定义几个接口,用于实现上述的要求

控制层代码:

代码如下:

@RestController
@RequestMapping("/api/mail")
public class MailController {
    private static Logger LOG=LoggerFactory.getLogger(MailController.class);

    @Autowired
    private JavaMailSender mailSender;

    @Autowired
    private TemplateEngine templateEngine;
    /*
     * 发送普通邮件
     */
    @PostMapping("/sendMail")
    public String sendMail(@RequestBody Mail mail) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(mail.getSender());
        message.setTo(mail.getReceiver());
        message.setSubject(mail.getSubject());
        message.setText(mail.getText());
        mailSender.send(message);
        LOG.info("发送成功!");
        return "发送成功!";
    }


    /*
     *  发送附件
     */
    @PostMapping("/sendAttachments")
    public String sendAttachmentsMail(@RequestBody Mail mail) throws MessagingException  {

        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom(mail.getSender());
        helper.setTo(mail.getReceiver());
        helper.setSubject(mail.getSubject());
        helper.setText(mail.getText());
        FileSystemResource file = new FileSystemResource(new File("1.png"));
        helper.addAttachment("附件.jpg", file);
        mailSender.send(mimeMessage);
        return "发送成功!";

    }

    /*
     * 发送文件
     */
    @PostMapping("/sendInlineMail")
    public String sendInlineMail(@RequestBody Mail mail) throws Exception {

        MimeMessage mimeMessage = mailSender.createMimeMessage();

        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom(mail.getSender());
        helper.setTo(mail.getReceiver());
        helper.setSubject(mail.getSubject());
        //这里的text 是html
        helper.setText(mail.getText(), true);
        FileSystemResource file = new FileSystemResource(new File("1.png"));
        helper.addInline("文件", file);
        mailSender.send(mimeMessage);
        return "发送成功!";
    }


    /*
     * 发送模板
     */
    @PostMapping("/sendTemplateMail")
    public void sendTemplateMail(@RequestBody Mail mail) throws Exception {

        MimeMessage mimeMessage = mailSender.createMimeMessage();

        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom(mail.getSender());
        helper.setTo(mail.getReceiver());
        helper.setSubject(mail.getSubject());

        //创建邮件正文
        Context context = new Context();
        context.setVariable("id", "1");
        context.setVariable("name", "xuwujing");
        String emailContent = templateEngine.process("emailTemplate", context);
        helper.setText(emailContent, true);
        mailSender.send(mimeMessage);
    }

}

App 入口

和普通的SpringBoot项目基本一样。

代码如下:

@SpringBootApplication
public class MailApp 
{
    public static void main( String[] args )
    {
        SpringApplication.run(MailApp.class, args);
        System.out.println("MailApp启动成功!");
    }
}

功能测试

我们成功启动该程序之后,我们使用Postman工具进行测试。

使用POST方式进行请求

POST http://localhost:8182/api/mail/sendMail

Body参数为:

{
"sender":"xxx@qq.com",
"receiver":"xxx@qq.com",
"subject":"测试主题",
"text":"测试消息"
}

注:当然这里的参数填写你自己的邮箱即可!

返回参数为:

发送成功!

示例图:

可以看到邮件已经发送成功了!

有的同学可能不知道授权码如何生成,这里我就用QQ邮箱生成授权码的一张示例图来说明。

示例图:

其它

关于SpringBoot项目实现文件上传和邮件发送的功能的文章就讲解到这里了,如有不妥,欢迎指正!

项目地址

SpringBoot实现文件上传的项目工程地址:

https://github.com/xuwujing/springBoot-study/tree/master/springboot-fileUpload

SpringBoot实现邮件发送的项目工程地址:

https://github.com/xuwujing/springBoot-study/tree/master/springboot-mail

SpringBoot整个集合的地址:

https://github.com/xuwujing/springBoot-study


推荐阅读

JVM 史上最最最完整深入解析(12000 字噢)

经验:一个秒杀系统的设计思考

如何在SpringBoot中异步请求和异步调用

SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架


好文!必须点赞
用ADS2023手把手仿真SKYWORKS SMA1234变容二极管:从Datasheet到S参数结果全流程 本文详细介绍了如何使用ADS2023仿真SKYWORKS SMA1234变容二极管的全流程,从Datasheet参数解析到S参数结果验证。通过等效电路建模、关键公式编写和仿真设置,帮助工程师掌握变容二极管在射频电路设计中的应用技巧,提升仿真精度和工程实践能力。 阅读详情

相关推荐

决策树(分类树、回归树)

决策树 前言:第一篇博客,最近看完决策树,想着归纳一下,也方便自己以后回顾。写的会比较全面一些,可能会有很多不太正确的地方,欢迎大家交流指正 : ) 决策树模型: 决策树模型是运用于分类以及回归的一种树结构。决策树由节点和有向边组成,一般一棵决策树包含一个根节点、若干内部节点和若干叶节点。决策树的决策过程需要从决策树的根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选...

你午睡了吗 9万+

boot - 文件流透传

在进行文件转发的时候,大多数处理方式是从 MultipartFile 请求参数中将文件临时保存在服务器,然后使用第三方http客户端再次读取文件,进行一次http请求转发,这样的效率不是很好。

面朝大海,春暖花开 644

文件上传和邮件发送

1.文件传输 2.邮件发送 3.javaweb发送邮件

容辞的博客 1118

Mac用户必看:Parallels Desktop 18.1.1最新破解版安装与优化全攻略(附资源)

本文为Mac用户提供Parallels Desktop 18.1.1的详细安装与优化指南,涵盖虚拟化技术选型、专业级配置流程及性能调优技巧。重点解析Parallels Desktop在图形加速、系统资源调度方面的核心优势,并分享生产力增强技巧与典型应用场景实战方案,帮助用户最大化利用这一高效虚拟化工具。

weixin_29240343的博客 828

Foxglove Studio实战:5步搞定自动驾驶数据可视化(附避坑指南)

本文详细介绍了如何使用Foxglove Studio高效搭建自动驾驶数据可视化工作流。通过五个核心步骤:环境准备、数据导入、面板搭建、交互分析与自动化集成,帮助开发者快速掌握这一专为机器人系统设计的开源平台。文章重点解析了其与ROS/ROS 2、MCAP等数据源的无缝对接,以及3D点云、多传感器融合、团队标注等核心功能,并附有实用的性能优化与避坑指南,旨在提升算法调试与团队协作效率。

d3e4f的博客 339

java mail pom_10.基于Spring的Maven项目实现发送邮件功能

问题分析现在我们有这样一个需求,就是当我们系统出现问题或bug的时候,让系统通过邮件发送日志信息给相关人员,那么此时,我们就需要实现一个让系统发送邮件的功能解决步骤1.pom jar包导入javax.mailmail1.4.12.xml配置application-mail.xml配置xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:s...

weixin_39857876的博客 452

ADS中使用Momentum进行电源完整性分析示例

这个应用可以帮助工程师用更快的时间使用ADS Momentum完成PDN分析。该应用描述了利用ADS Momentum RF模拟器进行PDN分析的方法,大大缩短了计算时间。 该分析主要应用与高速数字设计。 在此应用中使用了以下ADS特性: ADS设计流程集成(ADFI)。 电磁协同仿真。 Momentum仿真。 仿真流程如下: 在Allegro中创建ADFI文件 要将Alleg...

zb6075_lb的专栏 7013

FDE全栈数据工程师实战指南:从数据采集到模型部署完整技术栈

全栈数据工程师(FDE)是数据工程领域的重要发展方向,需要掌握从数据采集、处理到模型部署的完整技术栈。其核心原理在于构建可靠的数据流水线,通过流批一体架构实现数据处理的高效性与一致性。在技术价值层面,FDE工程师能够打通数据到AI应用的最后一公里,显著提升机器学习项目的落地效率。典型应用场景包括实时推荐系统、数据中台建设、企业级数据平台等。AIEWF发布的FDE演讲合集系统梳理了数据流水线设计模式、数据质量保障体系等关键技术,其中Apache Spark和Apache Flink作为主流数据处理工具,在批处

weixin_34185320的博客 470

昇腾NPU实战:PaddleSpeech语音模型高效部署与性能优化指南

本文详细介绍了如何在华为昇腾NPU上高效部署PaddleSpeech语音识别模型。通过使用官方Docker镜像、解决依赖冲突、修改源码适配NPU算子,并应用混合精度与批处理等优化技巧,实现模型在昇腾平台上的稳定运行与性能提升,为AI语音应用提供高性价比的国产硬件部署方案。

weixin_29214691的博客 181

SM2 是一种国密算法,用于生成密钥对和加解密。下面是 SM2 生成密钥对和加解密的示例代码,使用 Python 语言编写。

在这个函数中,我们使用公钥对数据进行加密,并返回加密后的结果。其中,我们使用了 OAEP 填充方案和 SHA256 哈希算法。SM2 是一种国密算法,用于生成密钥对和加解密。下面是 SM2 生成密钥对和加解密的示例代码,使用 Python 语言编写。首先,我们需要安装 cryptography 库,它包含了 SM2 算法的实现。使用上述代码,我们可以轻松地实现 SM2 密钥对生成和加解密功能。在这个函数中,我们使用私钥对密文进行解密,并返回解密后的明文。接下来,我们定义一个函数。在这个函数中,我们使用。

2301_78484069的博客 1952

springboot 上传文件_SpringBoot项目实现文件上传和邮件发送

精选:★→2020年最新的常问企业面试题大全以及答案前言本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能。SpringBoot 文件上传说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码。开发准备环境要求JDK:1.8SpringBoot:1.5.9.RELEASE首先还是Maven的相关依赖:pom.xml文件如下:<properties&...

weixin_39623050的博客 416

Python 爬虫教程:抓取视频平台数据(观看量、评论数、点赞数等)

爬虫(Crawler)是通过编写程序模拟浏览器行为,从互联网上抓取并提取信息的技术。爬虫的核心任务是模拟用户访问网页,获取网页内容并解析出我们需要的数据。爬虫技术被广泛应用于搜索引擎、数据分析、电商价格监控、内容抓取等领域。Bilibili和YouTube。这两个平台都提供丰富的用户生成内容(UGC),且在中国和全球范围内都非常流行。Bilibili:以二次元文化为主的视频平台,用户活跃,视频内容丰富。Bilibili的网页数据较为简单,可以通过传统的HTML解析抓取。YouTube。

2201_76125261的博客 1854

bootstrap上传之后的处理_SpringBoot项目实现文件上传和邮件发送

前言本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能。SpringBoot 文件上传说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码。开发准备环境要求JDK:1.8SpringBoot:1.5.9.RELEASE首先还是Maven的相关依赖:pom.xml文件如下: UTF-8 1.8 1.8 1.8 org.springframework.boot...

weixin_39590601的博客 231

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

multipartfile创建文件流_SpringBoot项目实现文件上传和邮件发送

精选:★→2020年最新的常问企业面试题大全以及答案前言本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能。SpringBoot 文件上传说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码。开发准备环境要求JDK:1.8SpringBoot:1.5.9.RELEASE首先还是Maven的相关依赖:pom.xml文件如下:<propertie...

weixin_39557576的博客 813

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

postman 上传 $_file不存在_SpringBoot项目实现文件上传和邮件发送

前言本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能。SpringBoot 文件上传说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码。开发准备环境要求JDK:1.8SpringBoot:1.5.9.RELEASE首先还是Maven的相关依赖:pom.xml文件如下: UTF-8 1.8 1.8 1.8 org.springframework.boot...

weixin_32075603的博客 445

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

springboot整合QuartZ邮件文件上传JPA

springboot整合QuartZ邮件文件上传JPA 一. 定时任务 定时任务就是指定时执行某一个流程方法。在Java中有很多种方式去实现它,如果只需要简单的方式可以采用SpringTask,如果需要分布式那么可以使用QuartZ。 1.1 集成SpringTask 集成SpringTask无需导入任何其他第三方库 第一步:编写对应的任务类A @Component public class My...

weixin_39034379的博客 369

【项目笔记】后端框架的搭建用法以及一些常用功能的实现,使用Springboot+mybatis-plus等技术

此项目使用的是VUE+ELEMENTUI以及Springboot+mybatis-plus的技术进行的开发,基于IDEA软件。此笔记只记录了后端的开发,故此篇文章暂时只用到了Springboot+mybatis-plus的技术。

努力敲代码的小盆友 1644

springboot相关有趣的文章总结(转)

1.Springboot线程池的使用和扩展https://mp.weixin.qq.com/s/SCbZueYmODmCXUhn6y3q5A 2.SpringBoot项目实现文件上传和邮件发送https://mp.weixin.qq.com/s/jiVy3vWgyasEDtESJg8ycw 3.Springboot使用RedisTemplate优雅地操作redishttps://mp....

qq_39809613的博客 548

基于javaweb+mysql的springboot网上水果蔬菜项目系统设计和实现(java+springboot+mysql+ssm)

管理员角色的功能:管理用户信息、管理用户评论信息、管理商品信息、管理订单信息等等功能。

m0_71327314的博客 257

Java(JavaWeb07)

16. JavaWeb实现文件上传 17. JavaWeb实现邮件发送 18. 网站注册发送邮件实现

Zachsj的博客 250
上一篇: 推荐 33 个 IDEA 最牛配置,写代码太爽了
下一篇: 你天天撸Controller方法,你想过这些方法里的参数是如何工作的吗?
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值