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

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注解

相关文章:

  • PyCharm 的使用 + PyCharm快捷键 + 切换中文界面
  • 管理后台环境配置
  • C++ 中 cin 和 cout 教程
  • Exoplayer(MediaX)实现音频变调和变速播放
  • git -学习笔记
  • vscode下载安装教程(附安装包)vscode图文安装教程最新版
  • leetcode707----设计链表【链表增删改打印等操作】
  • 深入理解Java反射机制:从基础到高级应用
  • vue3表单验证的时候访问接口如果有值就通过否则不通过.主动去触发校验
  • MySQL分库分表之带来查询相关问题
  • 【洛谷贪心算法题】P2240部分背包问题
  • JavaScript遍历方式总结
  • 【AI+智造】用DeepSeek支持设备温度、振动、速度、加速度量化数据的应用方案——以常州新能源动力电池制造企业为例
  • 实践教程:使用DeepSeek实现PDF转Word的高效方案
  • DeepSeek 开源狂欢周(二)DeepEP深度技术解析 | 解锁 MoE 模型并行加速
  • IXI MEGA M1和M2 Plus DAW和跳线盘设置
  • 验证环境中为什么要用virtual interface
  • 【Go】十八、http 调用服务的编写
  • webstorm的Live Edit插件配合chrome扩展程序JetBrains IDE Support实现实时预览html效果
  • 深度剖析设备预测性维护系统有必要吗?
  • 解锁儿时愿望!潘展乐战胜孙杨,全国冠军赛男子400自夺冠
  • 被围观的“英之园”,谁建了潮汕天价违建?
  • 巴菲特最新调仓:一季度大幅抛售银行股,再现保密仓位
  • 上海市税务局回应刘晓庆被举报涉嫌偷漏税:正依法依规办理
  • “85后”贵阳市政府驻重庆办事处主任吴育材拟任新职
  • 现场丨在胡适施蛰存等手札与文献间,再看百年光华