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,      // 最大文件大小 10MBmaxRequestSize = 10 * 1024 * 1024,   // 最大请求大小 10MBfileSizeThreshold = 1 * 1024 * 1024  // 文件大小阈值 1MB
)
public class UploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected 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.mzph.cn/bicheng/72240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025最新Flask学习笔记(对照Django做解析)

前言&#xff1a;如果还没学Django的同学&#xff0c;可以看Django 教程 | 菜鸟教程&#xff0c;也可以忽略下文所提及的Django内容&#xff1b;另外&#xff0c;由于我们接手的项目大多都是前后端分离的项目&#xff0c;所以本文会跳过对模板的介绍&#xff0c;感兴趣的朋友可…

自然语言处理NLP入门 -- 第十一节NLP 实战项目 3: 文本摘要

1. 为啥需要文本摘要&#xff1f; 还记得小时候我们要写“读后感”或“观后感”吗&#xff1f;看完一篇长长的文章、一本书&#xff0c;甚至一部电影后&#xff0c;老师总是要我们用几句话概括主要内容。其实&#xff0c;这就跟文本摘要的核心思路一样——把那些最有价值、最能…

算法day4 dfs搜索2题

一 糖果 我们看这个蓝桥A组真题 首先我们看这个题目说有M种的糖果&#xff0c;K颗一包&#xff0c;N包糖果 第一行就是输入M&#xff0c;K&#xff0c;N的数量 后面就是输入每个糖果在每包里面的种类 然后问我们最少要用几包糖果才可以把所有种类的糖果都吃一遍 如果不可以吃完…

【MySQL】窗口函数详解(概念+练习+实战)

文章目录 前言1. SQL窗口函数 1.1 窗口函数概念1.2 窗口函数语法1.3 常见窗口函数 1.3.1 聚合窗口函数1.3.2 专用窗口函数 1.4 窗口函数性能比较 2. LeetCode 例题 2.1 LeetCode SQL 178&#xff1a;分数排名2.2 LeetCode SQL 184&#xff1a;最高工资2.3 LeetCode SQL 185&am…

【Ai】--- DeepSeek-r1 如何选择适合自己的版本(超详细)

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Ai】--- DeepSeek-r1 如何选择适合自己…

植物大战僵尸金铲铲版 v1.1.6(windows+安卓)

游戏简介 《植物大战僵尸金铲铲版》是由“古见xzz”、“对不起贱笑了”、“是怪哉吖”等联合开发的民间魔改版本&#xff0c;融合了原版塔防玩法与《金铲铲之战》的自走棋元素&#xff0c;属于非官方同人作品。 游戏特点 合成升星机制&#xff1a;三个相同低星植物可合成更高…

网络空间安全(6)web应用程序技术

前言 Web应用程序技术是指用于开发和构建基于Web的应用程序的技术和工具&#xff0c;涵盖了前端开发、后端开发、数据库管理、安全性等多个方面的技术。 一、前端开发技术 HTML/CSS/JavaScript&#xff1a;HTML用于构建网页结构&#xff0c;CSS用于进行样式设计&#xff0c;Jav…

零基础学习OpenGL(一)创建一个窗口

基于 ubuntu 系统&#xff0c;设置基础环境。 #!/usr/bin/env bashsudo apt-get update# 安装基础编译软件 sudo apt-get -y install gcc g cmake git# 安装编译 glfw 依赖的软件 sudo apt-get -y install libwayland-dev libx11-dev libxcursor-dev libxi-dev libxinerama-de…

Windows 11 下正确安装 Docker Desktop 到 D 盘的完整教程

文章目录 Windows 11 在 D 盘正确安装 Docker Desktop 的完整教程**前言****准备工作****1. 手动创建 Docker 相关目录**&#xff08;⚠️ **这一步非常重要**&#xff0c;否则会报错&#xff09;**2. 下载 Docker Desktop 安装程序****3. 使用管理员权限打开终端** **安装 Doc…

版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点

版图自动化连接算法开发 00001 ------ 直接连接两个给定的坐标点 引言正文定义坐标点的类绘图显示代码直接连接两个坐标点引言 由于人工智能的加速普及,每次手动绘制版图都会觉得特别繁琐,作者本人在想可否搞一个自动化连接器件端口的算法,后期可以根据一些设定的限制进行避…

AIP-156 单例资源

编号156原文链接AIP-156: Singleton resources状态批准创建日期2019-05-12更新日期2024-04-15 API有时需要表示在任意上级资源中&#xff0c;始终只存在一个实例的资源。常见的例子是配置对象。 指南 API 可以 定义 单例资源 。单例资源 必须 始终随上级资源而存在&#xff…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图(水文,勿三)

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节我们来学习指针的相关知识&#xff0c;学习内存和地址&#xff0c;指针变量和地址&#xff0c;包…

【实用技巧】RAGFlow+DeepSeek搭建私人Ai助理

前言 满血版DeepSeek虽然很好用&#xff0c;但仍然有三个主要缺陷&#xff1a; 联网的DeepSeek无法解决数据安全问题&#xff0c;如果使用&#xff0c;数据将传输到其服务器&#xff0c;数据隐私性无法保证。上传的文件存在限制&#xff0c;无法解决有多个文件的问题。回答的…

Storm实时流式计算系统(全解)——中

storm编程的基本概念-topo-spout-bolt 例如下&#xff1a; storm 编程接口-spout的结构及组件实现 storm编程案例-spout组件-实现 这是我的第一个组件&#xff08;spout组件继承BaseRichSput&#xff09;所有重写内部的三个方法&#xff0c;用于接收数据&#xff08;这里数据是…

【tplink】校园网接路由器如何单独登录自己的账号,wan-lan和lan-lan区别

老式路由器TPLINK&#xff0c;接入校园网后一人登录&#xff0c;所有人都能通过连接此路由器上网&#xff0c;无法解决遂上网搜索&#xff0c;无果&#xff0c;幸而偶然看到一个帖子说要把信号源网线接入路由器lan口&#xff0c;开启新世界。 一、wan-lan&#xff0c;lan-lan区…

Qt常用控件之旋钮QDial

旋钮QDial QDial 表示一个旋钮控件。 1. QDial属性 属性说明value当前数值。minimum最小值。maximum最大值。singleStep按下方向键时改变的步长。pageStep按下 pageUp/pageDown 的时候改变的步长。sliderPosition界面上旋钮显示的初始位置。tracking外观是否会跟踪数值变化&…

微服务笔记 2025/2/15

微服务是一种软件架构风格&#xff0c;它是以专注于单一职责的很多小型项目为基础&#xff0c;组合出复杂的大型应用。 微服务是一种架构。 微服务是一种架构。 微服务是一种架构。 以前自己做项目最常用的架构是单体架构。单体项目不适合开发大型项目。 学习微服务技术来解…

7-1JVMCG垃圾回收

一、GC的作用与原理 ​核心功能​ 自动识别并回收堆内存中不再被引用的对象&#xff0c;释放内存空间。 避免手动管理内存的复杂性&#xff08;如C/C中的delete/free操作&#xff09;&#xff0c;降低内存泄漏风险。 ​判断对象可回收的方法​ ​可达性分析算法&#xff1a;…

yunedit-post ,api测试比postman更好

postman应该是大家最熟悉的api测试软件了&#xff0c;但是由于它是外国软件&#xff0c;使用它的高端功能注册和缴费都比较麻烦。生成在线文档分享也经常无法访问被拦截掉。 这里可以推荐一下yunedit-post&#xff0c;该有的功能都有。 https://www.yunedit.com/postdetail …

010 rocketmq批量消息

文章目录 批量消息BatchProducer.javaBatchConsumer.java 批量消息 批量发送可以提⾼发送性能&#xff0c;但有⼀定的限制&#xff1a; topic 相同 waitStoreMsgOK 相同 &#xff08;⾸先我们建设消息的iswaitstoremsgoktrue(默认为true), 如果没有异常,我们将始终收到"O…