JSP文件上传

一、

在tomcat部署的项目下建一个文件夹,用于存放上传文件

再在你的项目中加入这两个jar包,引入到项目中去

 

 

 

 

二、在项目中创建你的文件上传页面

<%--
  Created by IntelliJ IDEA.
  User: 风间琉璃
  Date: 2021/4/19
  Time: 16:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
    <!--form表单中如果要上传文件,需改为post提交,且加上----enctype="multipart/form-data"-->
    <form action="${pageContext.request.contextPath}/FileUploadServlet" method="post" enctype="multipart/form-data">
        姓名:<input type="text" name="name" />
        <br/>
        头像:<input type="file" name="img" />
        <br/>
        <input type="submit" value="提交" />
    </form>
</body>
</html>

 

 三、创建一个servlet,细节省略(偷懒/doge)

package JSP_Servlet.FileUpload.servlet;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

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 java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Random;

@WebServlet("/FileUploadServlet")
public class FileUploadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();

        String name = "";

        //通过FileItemFactory工厂对象实例化ServletFileUpload对象
        FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);

        try{
            //调用ServletFileUpload的parseRequest()将表单中字段解析成FileItem对象的集合
            List<FileItem> items = upload.parseRequest(req);

            //foreach循环FileItem集合
            for (FileItem item : items){
                //如果元素为普通的表单字段,如input等
                if (item.isFormField()){
                    //如果该字段的name属性为name
                    if (item.getFieldName().equals("name")){
                        //需要设置字符集编码
                        name = item.getString("utf-8");
                    }
                }else {
                    //如果是文件数据  就需要上传
                    System.out.println("需要文件上传");
                    //源文件名
                    String sourceFileName = item.getName();
                    //获取后缀
                    String ext = sourceFileName.substring(sourceFileName.lastIndexOf("."));

                    //给目标文件命名
                    Random r = new Random();
                    // 为文件命名,为了不重名,使用系统当前时间的毫秒数加三位随机数命名,再加上后缀,例如:3445456546_231.jpg
                    String fileName = System.currentTimeMillis()+"_"+r.nextInt(1000)+ext;

                    //文件上传的目录
                    String uploadFilePath = req.getSession().getServletContext().getRealPath("upload/"); //服务器保存 文件上传 的位置(路径)

                    //目标文件
                    File targetFile = new File(uploadFilePath,fileName);

                    //将文件写入到 目标文件中
                    item.write(targetFile);

                    //上传成功
                    out.print(name+"上传了文件");
                }
            }
        }catch (Exception e){
            out.print("上传失败!");
            e.printStackTrace();
        }
    }
}

 

posted @ 2021-04-19 17:30  蹦蹦跳的扎克  阅读(159)  评论(0)    收藏  举报