Web-其他功能

文件上传

表单上传

<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是一种加密算法

特点

  1. 加密过程不可逆

  2. 同个数据,无论进行多少次加密操作,得到的结果永远相同

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个核心类:

  1. Message:描述一封邮件,java官方推荐使用子类MimeMessage

  2. Session:指定发送邮件的环境信息,构建MimeMessage对象时,需要使用该类的对象

  3. Transport:发送邮件的对象,该类中的静态方法send()用于发送邮件。

配置准备:

  1. 导入javamail依赖

  2. 选择一个邮件服务器(163),在服务器中通过设置去开启允许java应用程序使用邮件服务器发送邮件的功能

  3. 编写代码

// 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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值