• Web-其他功能


    文件上传

    表单上传

    1. <form action="/test.do?method=upload" method="post" enctype="multipart/form-data">
    2.       用户名:<input type="text" name="username"><br>
    3.       密码:<input type="password" name="password"><br>
    4.       头像:<input type="file" name="headerPhoto"><br>
    5.        <input type="submit" value="立即提交">
    6. form>
    1. public String upload(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    2.    // 判断请求是否存在文件内容(true:上传操作)
    3.    if (ServletFileUpload.isMultipartContent(req)) {
    4.        // 1.创建servletFileUpload对象,完成文件上传操作
    5.        ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
    6.        // 限制上传文件大小
    7.        upload.setSizeMax(100*1024*1024);
    8.        // 2.解析请求:获取所有表单控件附带数据
    9.        List fileItems = upload.parseRequest(req);
    10.        // 3.遍历fileItem集合,判断每一个fileItem的类型
    11.        // 是文件:进行文件上传处理
    12.        // 不是文件:获取其内容即可
    13.        for (FileItem fileItem : fileItems) {
    14.            // 判断是否是普通表单字段
    15.            if (fileItem.isFormField()) {
    16.                // 获取表单字段name属性值
    17.                String fieldName = fileItem.getFieldName();
    18.                // 获取表单字段value属性值
    19.                String value = fileItem.getString("UTF-8");
    20.           }
    21.            // 文件字段:开始完成上传操作
    22.            else{
    23.                // 设定上传后文件存储位置
    24.                String path="D:\\files";
    25.                // 避免文件同名问题:设唯一编码
    26.                // 获取上传文件原始名称
    27.                String originFileName = fileItem.getName();
    28.                // 获取上传文件的格式
    29.                String saveFileType = originFileName.substring(originFileName.lastIndexOf("."));
    30.                // 生成上传文件存储唯一名称
    31.                String saveFileName = UUID.randomUUID().toString().replace("-","");
    32.                // 创建存储上传文件内容的文件
    33.                File saveFile = new File(path, saveFileName + saveFileType);
    34.                // 将fileItem中的文件内容写入到存储的文件中
    35.                fileItem.write(saveFile);
    36.           }
    37.       }
    38.        // 不是文件上传:正常处理
    39.   }else{}
    40. }

    ajax文件上传

    注意:前后端分离时,上传文件存储的位置要存储到Hbuilder中你的项目中图片存储路径,上传成功后,要将图片存储路径返回给前端

    1. <img id="headerImg" src="../images/xxx.jpg" width="80" height="80"/>
    2. <input type="file" id="header" />
    3. <input type="button" id="btn" value="修改头像" />
    4. <script>
    5.    $(function () {
    6.        $("#btn").click(function () {
    7.            var formData=new FormData();
    8.            var files = $("#header").prop("files");
    9.            formData.append("header",files[0])
    10.            $.ajax({
    11.                url:"http://localhost:8080/test.do?method=upload",
    12.                data:formData,
    13.                type:"post",
    14.                dataType:"json",
    15.                cache:false,
    16.                processData:false,
    17.                contentType:false,
    18.                async:false,
    19.                success:function(resp){
    20.                    // 成功回调后修改图片路径
    21.                    $("#headerImg").attr("src","../images/"+resp.data)
    22.               }
    23.           })
    24.       })
    25.   })
    26. script>
    1. public void upload(HttpServletRequest req, HttpServletResponse resp) throws Exception {
    2.    // 判断请求是否存在文件内容(true:上传操作)
    3.    if (ServletFileUpload.isMultipartContent(req)) {
    4.        // 1.创建servletFileUpload对象,完成文件上传操作
    5.        ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
    6.        // 限制上传文件大小
    7.        upload.setSizeMax(100*1024*1024);
    8.        // 2.解析请求:获取所有表单控件附带数据
    9.        List fileItems = upload.parseRequest(req);
    10.        // 设定上传后文件存储位置
    11.        String path="E:\\78\\img";
    12.        for (FileItem fileItem : fileItems) {
    13.            // 判断是否是普通表单字段
    14.            if (!fileItem.isFormField()) {
    15.                // 获取名称
    16.                String originFileName = fileItem.getName();
    17.                // 获取上传文件的格式
    18.                String saveFileType = originFileName.substring(originFileName.lastIndexOf("."));
    19.                // 生成上传文件的存储唯一名称
    20.                String saveFileName = UUID.randomUUID().toString().replace("-", "");
    21.                // 创建存储上传文件内容的文件
    22.                File saveFile = new File(path, saveFileName + saveFileType);
    23.                // 将fileItem中的文件内容写入到存储的文件中
    24.                fileItem.write(saveFile);
    25.                // 返回前端文件名和类型信息
    26.                resp.getWriter().write(Result.success(200, "上传成功", saveFileName + saveFileType).toString());
    27.           }
    28.       }
    29.   }else {
    30.        resp.getWriter().write(Result.success(200, "上传失败", null).toString());
    31.   }
    32. }

    MD5加密

    MD5是一种加密算法

    特点

    1. 加密过程不可逆

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

    1. public class CommonsUtil {
    2.    public static String md5(String password){
    3.        try {
    4.            // 基于加密算法获取加密对象
    5.            MessageDigest md5 = MessageDigest.getInstance("MD5");
    6.            // 执行加密操作
    7.            byte[] bytes = md5.digest(password.getBytes());
    8.            // 将加密后的byte[]转换为字符串返回
    9.            return Base64.getEncoder().encodeToString(bytes);
    10.       } catch (NoSuchAlgorithmException e) {
    11.            throw new RuntimeException(e);
    12.       }
    13.   }
    14. }

    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. // 1.创建一封邮件
    2. Properties pros = new Properties();
    3. // 设置发送邮件使用的协议
    4. pros.setProperty("mail.transport.protocol","SMTP");
    5. // 设置发送邮件使用的邮件服务器
    6. pros.setProperty("mail.host","smtp.163.com");
    7. // 是否要进行验证
    8. pros.setProperty("mail.smtp.auth","true");
    9. Session session = Session.getInstance(pros, new Authenticator() {
    10.    @Override
    11.    protected PasswordAuthentication getPasswordAuthentication() {
    12.        // 参数1:邮箱帐号
    13.        // 参数2:授权密码
    14.        return new PasswordAuthentication("xxx.@xxx.com","xxx");
    15.   }
    16. });
    17. MimeMessage message = new MimeMessage(session);
    18. //设置邮件内容
    19. message.setContent("xxx","text/html;charset=utf-8");
    20. // 设置发送者
    21. message.setFrom(new InternetAddress("xxx.@xxx.com"));
    22. // 设置邮件接收者
    23. message.setRecipient(Message.RecipientType.TO,new InternetAddress("yyy.@yyy.com"));
    24. //设置邮件标题
    25. message.setSubject("XXX");
    26. Transport.send(message);
  • 相关阅读:
    Python实践项目——LSB隐写术
    一文搞懂 == 、equals和hashCode
    计算一共有多少种移除方案可以使s变为回文串
    verilog之wire vs reg区别
    Idea Mac版本 打不开、点击没反应、报错
    麒麟系统开发笔记(五):制作安装麒麟系统的启动U盘、物理机安装麒麟系统以及搭建Qt开发环境
    安卓Compose(一)
    基于Java+微信小程序实现《模拟考试平台》
    实时数仓:实时数据平台之设计篇
    测试员都是背锅侠?测试人员避“锅”攻略,拿走不谢
  • 原文地址:https://blog.csdn.net/Xstruggle/article/details/125892398