使用@MultipartConfig上传图片文件

  • @MultipartConfig是Java Servlet API的一部分,主要用于处理HTTP的multipart/form-data类型的请求,这种请求通常用于文件上传。当你在Servlet或JSP页面中使用@MultipartConfig时,你告诉容器这个Servlet或JSP页面将处理文件上传。
  • @MultipartConfig(location ="C:/Users/Administrator/Desktop" )这个只会将上传的图片文件临时存到Desktop文件夹中,名称为随机upload_e8a306b4_1327_483e_afe5_86092f39b380_00000000.tmp,这里不采用.
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;


import org.apache.catalina.core.ApplicationPart;
@WebServlet("/UploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        //获取服务器地址
        String path = this.getServletContext().getRealPath("/upload");
        //获取用户选择上传的文件
        Part p = req.getPart("file1");

        // 获取上传文件的原始文件名
        String originalFileName = Paths.get(p.getSubmittedFileName()).getFileName().toString();
        //仅处理上传的图像文件
        if (p.getContentType().contains("image")) {
//            ApplicationPart  ap = (ApplicationPart) p;
            //获取上传文件名
            Path saveFilePath = Paths.get(path, originalFileName);           Files.copy(p.getInputStream(),saveFilePath,StandardCopyOption.REPLACE_EXISTING);
            out.write("文件上传成功");
        }else{
            out.write("请选择图片文件");
            out.flush();
            out.close();
        }

        }
    }

编辑upload.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/4/22
  Time: 21:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Insert title here</title>
</head>
<body>
<form action="UploadServlet" enctype="multipart/form-data" method="post">
    选择文件<input type="file" name="file1"/>
    <input type="submit" name="upload" value="上传"/>
</form>
</body>
</html>

  • 第二种方法,使用InputStream和OutStream上传文件
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
@WebServlet("/UploadServlet1")
@MultipartConfig
public class UploadServlet2 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        // 获取服务器地址
        String path = this.getServletContext().getRealPath("/");
        //获取用户选择上传的文件
        Part filePart = req.getPart("file1");
        // 获取上传文件的原始文件名
        String originalFileName  = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
        //检查文件类型是否为图像
        if (filePart.getContentType().startsWith("image/")){
            // 构建文件保存路径
            String savePath = path + "/upload/" + originalFileName;
            // 保存文件到服务器
            try (InputStream input = filePart.getInputStream();
                OutputStream output = new FileOutputStream(savePath)){
                byte[] buffer = new byte[1024];
                int bytesRead;
                while((bytesRead = input.read(buffer))!= -1){
                    output.write(buffer,0,bytesRead);
                }
                //文件上传成功
                out.write("文件上传成功,文件名:" + originalFileName);
            }catch(Exception e){
                //处理文件保存时的异常
                out.write("文件上传失败:" + e.getMessage());
            }
        }else{
            // 文件类型不是图像
            out.write("请选择图片文件");
        }

    }
}

修改upload.jsp页面,修改action="UploadServlet1"即可.

posted @ 2024-04-23 17:08  文采杰出  阅读(263)  评论(0)    收藏  举报