文件上传
表单上传
<input type="file"/>
<form action="/test.do?method=upload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
头像:<input type="file" name="headerPhoto"><br>
<input type="submit" value="立即提交">
</form>
public String upload(HttpServletRequest req, HttpServletResponse resp) throws Exception {
// 判断请求是否存在文件内容(true:上传操作)
if (ServletFileUpload.isMultipartContent(req)) {
// 1.创建servletFileUpload对象,完成文件上传操作
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
// 限制上传文件大小
upload.setSizeMax(100*1024*1024);
// 2.解析请求:获取所有表单控件附带数据
List<FileItem> fileItems = upload.parseRequest(req);
// 3.遍历fileItem集合,判断每一个fileItem的类型
// 是文件:进行文件上传处理
// 不是文件:获取其内容即可
for (FileItem fileItem : fileItems) {
// 判断是否是普通表单字段
if (fileItem.isFormField()) {
// 获取表单字段name属性值
String fieldName = fileItem.getFieldName();
// 获取表单字段value属性值
String value = fileItem.getString("UTF-8");
}
// 文件字段:开始完成上传操作
else{
// 设定上传后文件存储位置
String path="D:\\files";
// 避免文件同名问题:设唯一编码
// 获取上传文件原始名称
String originFileName = fileItem.getName();
// 获取上传文件的格式
String saveFileType = originFileName.substring(originFileName.lastIndexOf("."));
// 生成上传文件存储唯一名称
String saveFileName = UUID.randomUUID().toString().replace("-","");
// 创建存储上传文件内容的文件
File saveFile = new File(path, saveFileName + saveFileType);
// 将fileItem中的文件内容写入到存储的文件中
fileItem.write(saveFile);
}
}
// 不是文件上传:正常处理
}else{}
}
ajax文件上传
注意:前后端分离时,上传文件存储的位置要存储到Hbuilder中你的项目中图片存储路径,上传成功后,要将图片存储路径返回给前端
<img id="headerImg" src="../images/xxx.jpg" width="80" height="80"/>
<input type="file" id="header" />
<input type="button" id="btn" value="修改头像" />
<script>
$(function () {
$("#btn").click(function () {
var formData=new FormData();
var files = $("#header").prop("files");
formData.append("header",files[0])
$.ajax({
url:"http://localhost:8080/test.do?method=upload",
data:formData,
type:"post",
dataType:"json",
cache:false,
processData:false,
contentType:false,
async:false,
success:function(resp){
// 成功回调后修改图片路径
$("#headerImg").attr("src","../images/"+resp.data)
}
})
})
})
</script>
public void upload(HttpServletRequest req, HttpServletResponse resp) throws Exception {
// 判断请求是否存在文件内容(true:上传操作)
if (ServletFileUpload.isMultipartContent(req)) {
// 1.创建servletFileUpload对象,完成文件上传操作
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
// 限制上传文件大小
upload.setSizeMax(100*1024*1024);
// 2.解析请求:获取所有表单控件附带数据
List<FileItem> fileItems = upload.parseRequest(req);
// 设定上传后文件存储位置
String path="E:\\78\\img";
for (FileItem fileItem : fileItems) {
// 判断是否是普通表单字段
if (!fileItem.isFormField()) {
// 获取名称
String originFileName = fileItem.getName();
// 获取上传文件的格式
String saveFileType = originFileName.substring(originFileName.lastIndexOf("."));
// 生成上传文件的存储唯一名称
String saveFileName = UUID.randomUUID().toString().replace("-", "");
// 创建存储上传文件内容的文件
File saveFile = new File(path, saveFileName + saveFileType);
// 将fileItem中的文件内容写入到存储的文件中
fileItem.write(saveFile);
// 返回前端文件名和类型信息
resp.getWriter().write(Result.success(200, "上传成功", saveFileName + saveFileType).toString());
}
}
}else {
resp.getWriter().write(Result.success(200, "上传失败", null).toString());
}
}
MD5加密
MD5是一种加密算法
特点
-
加密过程不可逆
-
同个数据,无论进行多少次加密操作,得到的结果永远相同
public class CommonsUtil {
public static String md5(String password){
try {
// 基于加密算法获取加密对象
MessageDigest md5 = MessageDigest.getInstance("MD5");
// 执行加密操作
byte[] bytes = md5.digest(password.getBytes());
// 将加密后的byte[]转换为字符串返回
return Base64.getEncoder().encodeToString(bytes);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
javaMail
方便程序员在java应用中进行邮件的相关操作而封装的一套api
邮件协议:邮件协议是TCP协议簇下的一部分
pop3:发送邮件
imap:接收邮件
smtp:既可接,也可发
发送邮件的3个核心类:
-
Message:描述一封邮件,java官方推荐使用子类MimeMessage
-
Session:指定发送邮件的环境信息,构建MimeMessage对象时,需要使用该类的对象
-
Transport:发送邮件的对象,该类中的静态方法send()用于发送邮件。
配置准备:
-
导入javamail依赖
-
选择一个邮件服务器(163),在服务器中通过设置去开启允许java应用程序使用邮件服务器发送邮件的功能
-
编写代码
// 1.创建一封邮件
Properties pros = new Properties();
// 设置发送邮件使用的协议
pros.setProperty("mail.transport.protocol","SMTP");
// 设置发送邮件使用的邮件服务器
pros.setProperty("mail.host","smtp.163.com");
// 是否要进行验证
pros.setProperty("mail.smtp.auth","true");
Session session = Session.getInstance(pros, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 参数1:邮箱帐号
// 参数2:授权密码
return new PasswordAuthentication("xxx.@xxx.com","xxx");
}
});
MimeMessage message = new MimeMessage(session);
//设置邮件内容
message.setContent("xxx","text/html;charset=utf-8");
// 设置发送者
message.setFrom(new InternetAddress("xxx.@xxx.com"));
// 设置邮件接收者
message.setRecipient(Message.RecipientType.TO,new InternetAddress("yyy.@yyy.com"));
//设置邮件标题
message.setSubject("XXX");
Transport.send(message);