上传头像或实时显示更新的问题

本篇博文主要解决的问题是,自己制作的网页,如学生信息表,有头像需求,提供头像更改功能,并能根据上传的文件,实时更新并显示出来。
如下图效果
图1:在这里插入图片描述 图2
在这里插入图片描述
图3
在这里插入图片描述
图4:
在这里插入图片描述

源代码:

jsp图片显示的代码:

 <c:forEach var="Student" items="${sessionScope.list}">

    <tr>
 <%--注意图片的路径,必须配置虚拟路径,不然实时更新功能不能实现--%>
        <td width="116px" height="116px"><img src="/upload/${Student.img}"  align="center"></td>
        
        <td>${Student.id}</td>
        <td>${Student.name}</td>
        <td>${Student.age}</td>
        <td>${Student.score}</td>
        <td><a href="javascript:void(0)" onclick="del(${Student.id})">删除</a>
            <a href="javascript:void(0)" onclick="update1(${Student.id})">修改</a>
        </td>

    </tr>

    </c:forEach>

图片上传的jsp源代码:

 <td ><img src="/upload/<%=stu.getImg()%>"  align="center" width="116px" height="116px">
       
            <form action="imgUploadServlet" enctype="multipart/form-data" method="POST" >
                头像文件: <input type="file" name="myfile"/><br>
                <input type="submit" value="upload"/>
            </form>

        </td>

Servlet的源代码

package servlet;
import entity.Student;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@SuppressWarnings("all")
@WebServlet(value = "/imgUploadServlet",name = "ImgUploadServlet")

public class ImgUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        ServletContext application = this.getServletContext();// 获取application
        Student stu=(Student) application.getAttribute("upstu");

        //1、设置编码格式
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //2、创建文件上传核心对象DiskFileItemFactory
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //3、文件上传对象
        ServletFileUpload upload = new ServletFileUpload(factory);
        //设置相关参数
//        upload.setHeaderEncoding("utf-8");//防止中文名乱码
//        upload.setFileSizeMax(1024*1024*5);//单位:b
        //4、解析request,将请求中的数据封装成FileItem
        try {
            List<FileItem> list = upload.parseRequest(request);
            //遍历集合解析数据
            for (FileItem item : list) {
                if(item.isFormField()){//普通字段

                }else{//表示是文件
                    //文件上传
                    //获取所上传的原来的文件名
//                    String filename =stu.getId()+".png";

            //设置存储在文件中的文件名。   注意:对于头像的实时更新,同一个学生的头像的文件名,第一次和第二次上传后的文件名不能相同,否则实时更新功能可能时灵时不灵。
                    String filename =stu.getId()+"f"+new Date().getTime()+".png";
                    stu.setImg(filename);

                    //更新该学生的头像文件名
                    File fil = new File("G:\\JavaServlet_last\\day01\\src\\servlet\\student");
                    ArrayList<Student> list1 = new ArrayList<Student>();
                    if(fil.length()!=0) {
                        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fil)); // 开启  对象输入流
                        try {
                            list1=(ArrayList<Student>) ois.readObject();
                            ois.close();
                        } catch (ClassNotFoundException e) {
                        }
                    }
                    for (int i = 0; i < list1.size(); i++) {
                        if(list1.get(i).getId()==stu.getId()){
                            list1.get(i).setImg(filename);
                            break;
                        }
                    }
                    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fil));
                    oos.writeObject(list1);
                    oos.close();



                    //确定存储路径
                    String filepath = "G:\\JavaServlet_last\\day01\\web\\img";
                    File file = new File(filepath);
                    if(!file.exists()){
                        file.mkdirs();
                    }
                    //拼接上传路径
                    filepath = filepath+File.separator+filename;
                    System.out.println(filepath);
                    //获取输入流
                    InputStream in = item.getInputStream();
                    //获取输出流
                    FileOutputStream out = new FileOutputStream(filepath);
                    //复制
                    IOUtils.copy(in, out);
                    out.close();
                    in.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

//        response.sendRedirect("/updateServlet");
//        request.getRequestDispatcher("/updateServlet").forward(request,response );
        response.sendRedirect("/update01.jsp");


    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response );
    }
}

注意点:
1、图片的读取,必须使用虚拟路径;
2、同一个位置的图片的显示,存储在Servlet中的名称相邻两次不能一样;

(备注:这个项目完成了管理人员登陆功能,学生信息的添加,修改,删除,头像的更改功能,如有源代码需求,可私信)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值