博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot项目实现文件上传和邮件发送
阅读量:6152 次
发布时间:2019-06-21

本文共 9703 字,大约阅读时间需要 32 分钟。

前言

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

SpringBoot 文件上传

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

开发准备

环境要求

JDK:1.8

SpringBoot:1.5.9.RELEASE

首先还是Maven的相关依赖:

pom.xml文件如下:

UTF-8
1.8
1.8
1.8
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-thymeleaf

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

application.properties:

banner.charset=UTF-8server.tomcat.uri-encoding=UTF-8spring.http.encoding.charset=UTF-8spring.http.encoding.enabled=truespring.http.encoding.force=truespring.messages.encoding=UTF-8server.port=8182spring.http.multipart.maxFileSize=100Mbspring.http.multipart.maxRequestSize=100MbfilePath=F:/test/

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

代码编写

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

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

html代码如下:

      uploading.html    

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

Postman的操作方式为:

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

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

代码如下:

@Controllerpublic 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项目基本一样。

代码如下:

@SpringBootApplicationpublic 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文件如下:

UTF-8
1.8
1.8
1.8
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-mail
org.springframework
spring-context-support

然后就是application.properties的文件配置,这里我们需要根据自己的实际情况进行填写。如下述的配置文件示例中,个人使用的是qq邮箱,因此spring.mail.host配置的是smtp.qq.com。下述的示例中,只需填写个人邮箱的账号和密码即可。如果出现了535 错误,则需要该邮箱开启POP3/SMTP服务,并且使用授权码替换密码进行发送。

application.properties:

server.port = 8182spring.mail.host=smtp.qq.comspring.mail.username=xxx@qq.comspring.mail.password=xxxspring.mail.default-encoding=UTF-8spring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.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项目基本一样。

代码如下:

@SpringBootApplicationpublic 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

SpringBoot整合系列的文章

音乐推荐

推荐一首在静下心来看书的纯音乐!

原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!

版权声明:
作者:虚无境
博客园出处:http://www.cnblogs.com/xuwujing
CSDN出处:http://blog.csdn.net/qazwsxpcm    
个人博客出处:http://www.panchengming.com

转载于:https://www.cnblogs.com/xuwujing/p/10945698.html

你可能感兴趣的文章
07-JAVA继承与接口
查看>>
ubuntu15.10下sublime text3 无法输入中文解决办法
查看>>
LR web_custom_request
查看>>
MySQL-DDL语言
查看>>
Java-笔记10-复习
查看>>
5月10团队博客
查看>>
意见汇总
查看>>
phpcmsv9 幻灯片管理模块_UTF8
查看>>
(转)mysql分表的3种方法
查看>>
对Java单继承的弥补——接口
查看>>
洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器
查看>>
MySQL中优化sql语句查询常用的30种方法
查看>>
.NET CORE实践(1)--Ubuntu下的Hello World
查看>>
1755: [Usaco2005 qua]Bank Interest
查看>>
hive升级注意事项
查看>>
C#---属性和字段
查看>>
COGS1533.[HNOI2002]营业额统计
查看>>
How to reset XiaoMi bluetooth headphone Youth edition.
查看>>
SEOer 的生涯正式开始
查看>>
CodeForces 348D Turtles(LGV定理)题解
查看>>