当前位置: 首页 > article >正文

javaweb将上传的图片保存在项目文件webapp下的upload文件夹下

  1. 前端HTML表单 (upload.html)
    首先,创建一个HTML页面,允许用户选择并上传图片。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>图片上传</title>
</head>
<body>
    <h2>上传图片</h2>
    <form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="myImage" accept="image/*" required>
        <br><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>

注意:表单的method设置为"post",enctype需设置成"multipart/form-data"
2. 后端Servlet (UploadServlet.java)
接下来,创建一个Servlet来处理文件上传请求,并将上传的图片保存到webapp/load目录下。

package com.example.upload;

import java.io.File;
import java.io.IOException;
import java.util.List;

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;

@WebServlet("/upload")
@MultipartConfig(
    location = "${initParam.uploadPath}", // 上传文件的临时存储路径
    maxFileSize = 10 * 1024 * 1024,      // 最大文件大小 10MB
    maxRequestSize = 10 * 1024 * 1024,   // 最大请求大小 10MB
    fileSizeThreshold = 1 * 1024 * 1024  // 文件大小阈值 1MB
)
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 获取上传的文件部分
        Part filePart = request.getPart("myImage");
        if (filePart == null) {
            response.getWriter().println("没有选择文件!");
            return;
        }

        // 获取文件名
        String fileName = getFileName(filePart);
        if (fileName == null || fileName.isEmpty()) {
            response.getWriter().println("文件名为空!");
            return;
        }

        // 获取webapp/load目录的实际路径
        String savePath = getServletContext().getRealPath("/upload") + File.separator + fileName;

        // 确保load目录存在
        File loadDir = new File(getServletContext().getRealPath("/upload"));
        if (!loadDir.exists()) {
            loadDir.mkdirs();
        }

        // 保存文件
        try {
            filePart.write(savePath);
            response.getWriter().println("文件上传成功!保存路径:" + savePath);
        } catch (IOException e) {
            response.getWriter().println("文件上传失败:" + e.getMessage());
        }
    }

    // 获取上传文件的文件名
    private String getFileName(Part part) {
        for (String content : part.getHeader("content-disposition").split(";")) {
            if (content.trim().startsWith("filename")) {
                return content.substring(content.indexOf('=') + 1).trim().replace("\"", "");
            }
        }
        return null;
    }
}

注意需添加@MultipartConfig注解


http://www.kler.cn/a/565469.html

相关文章:

  • 从像素到光线:现代Shader开发的范式演进与性能优化实践
  • 某住宅小区地下车库安科瑞的新能源汽车充电桩的配电设计与应用方案 安科瑞 耿笠
  • MinIO在 Docker中修改登录账号和密码
  • 【CentOS7】虚拟机网络模式配置
  • (2.26 “详细分析示例“ 暴力+位运算 最长优雅子数组)leetcode 2401
  • docker本地镜像源搭建
  • C++ Primer 泛型算法结构
  • 【Elasticsearch】Painless 脚本语言如何学习
  • 2025年度福建省职业院校技能大赛高职组“信息安全管理与评估”赛项规程样题模块二
  • REACT学习第三幕--沉睡花园
  • Python常见面试题的详解22
  • 解决vmware虚拟机下 kali 无root权限问题
  • Midscene.js - AI驱动,轻松实现UI自动化
  • 【数据结构进阶】哈希表
  • springboot411-基于Java的自助客房服务系统(源码+数据库+纯前后端分离+部署讲解等)
  • 【01游戏——DFS】
  • Linux驱动学习(四)--字符设备注册
  • 工作中遇到的EXCEL小问题:多行有间隔符的合并
  • 广东GZ033-任务E:数据可视化(15 分)-用柱状图展示销售金额最高的6 个月
  • Golang适配达梦数据库连接指定模式