本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能。html
说明:若是想直接获取工程那么能够直接跳到底部,经过连接下载工程代码。前端
环境要求java
JDK:1.8git
SpringBoot:1.5.9.RELEASEgithub
首先仍是Maven的相关依赖:web
pom.xml文件以下:spring
<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的文件配置。api
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/
。tomcat
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上传的示例图:
最后说明一下,若是文件重复上传,后面上传的文件会替换掉以前的那个文件。
说明:若是想直接获取工程那么能够直接跳到底部,经过连接下载工程代码。
环境要求
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方式进行请求
Body参数为:
{ "sender":"xxx@qq.com", "receiver":"xxx@qq.com", "subject":"测试主题", "text":"测试消息" }
注:固然这里的参数填写你本身的邮箱便可!
返回参数为:
发送成功!
示例图:
有的同窗可能不知道受权码如何生成,这里我就用QQ邮箱生成受权码的一张示例图来讲明。
示例图:
关于SpringBoot项目实现文件上传和邮件发送的功能的文章就讲解到这里了,若有不妥,欢迎指正!
SpringBoot实现文件上传的项目工程地址: github.com/xuwujing/sp…
SpringBoot实现邮件发送的项目工程地址: github.com/xuwujing/sp…
SpringBoot整个集合的地址: github.com/xuwujing/sp…
推荐一首在静下心来看书的纯音乐!
原创不易,若是感受不错,但愿给个推荐!您的支持是我写做的最大动力! 版权声明: 做者:虚无境 博客园出处:www.cnblogs.com/xuwujing CSDN出处:blog.csdn.net/qazwsxpcm 我的博客出处:www.panchengming.com