在JSP中实现图片上传功能

在JSP中实现图片上传功能需要结合Servlet处理文件流,以下是实现步骤和示例代码:

一、前端表单设计

<!-- upload.jsp --> <form action="UploadServlet" method="post" enctype="multipart/form-data"> <label>选择图片:</label> <input type="file" name="imageFile" accept="image/*"> <input type="submit" value="上传"> </form>

关键点

  1. enctype="multipart/form-data"必须设置
  2. accept="image/*"限制文件类型

二、后端Servlet处理

// UploadServlet.java @WebServlet("/UploadServlet") @MultipartConfig public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) { try { Part filePart = request.getPart("imageFile"); String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); InputStream fileContent = filePart.getInputStream(); // 保存到服务器路径(示例路径) String savePath = getServletContext().getRealPath("/uploads"); Files.copy(fileContent, Paths.get(savePath, fileName)); response.getWriter().print("上传成功!文件名:" + fileName); } catch (Exception e) { response.setStatus(500); e.printStackTrace(); } } }

三、配置注意事项

  1. 依赖库:需要javax.servlet.http.Part支持(Servlet 3.0+)
  2. 存储路径
    // 推荐使用安全路径 String uploadPath = getServletContext().getRealPath("") + File.separator + "uploads"; new File(uploadPath).mkdirs(); // 创建目录
  3. 安全限制
    // 检查文件类型 if (!fileName.toLowerCase().endsWith(".jpg") && !fileName.toLowerCase().endsWith(".png")) { response.getWriter().print("仅支持JPG/PNG格式"); return; }

四、高级功能扩展

  1. 重命名文件
    String newName = UUID.randomUUID().toString() + ".jpg";
  2. 缩略图生成: 使用ImageIOThumbnailator库:
    Thumbnails.of(new File(savePath, fileName)) .size(200, 200) .toFile(new File(savePath, "thumb_"+fileName));

五、常见问题解决

  1. 文件大小限制: 在web.xml中配置:
    <multipart-config> <max-file-size>10485760</max-file-size> <!-- 10MB --> </multipart-config>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1121984.shtml

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

相关文章

nrf52832的mdk下载程序与GDB调试对比解析

nRF52832开发调试双雄对决&#xff1a;MDK下载与GDB调试的实战对比你有没有遇到过这种情况——在实验室用Keil点一下“Download”轻松烧完程序&#xff0c;结果换到CI服务器上跑自动化测试时&#xff0c;OpenOCD却频频连接失败&#xff1f;又或者&#xff0c;你的同事在Mac上死…

iOS开发者的宝藏库:Navigate UI组件完全指南

iOS开发者的宝藏库&#xff1a;Navigate UI组件完全指南 【免费下载链接】awesome-ios A collaborative list of awesome for iOS developers. Include quick preview. 项目地址: https://gitcode.com/gh_mirrors/awe/awesome-ios 在iOS应用开发过程中&#xff0c;选择合…

用Ray加速医疗模型训练

&#x1f4dd; 博客主页&#xff1a;jaxzheng的CSDN主页 用Ray加速医疗模型训练&#xff1a;突破计算瓶颈&#xff0c;赋能精准医疗目录用Ray加速医疗模型训练&#xff1a;突破计算瓶颈&#xff0c;赋能精准医疗 引言&#xff1a;医疗AI训练的“时间困局” Ray框架&#xff1a;…

必要开发工具链说明(Visual Studio等)

IDM插件开发创意赛技术文章大纲 参赛背景与意义 介绍IDM&#xff08;Internet Download Manager&#xff09;及其插件系统的应用场景分析当前主流下载工具的插件生态现状阐述开发创新插件的技术价值和商业潜力 开发环境搭建 官方SDK获取途径与环境配置要求必要开发工具链说…

Qwen3Guard-Gen-8B在电商评论审核中的落地实践:准确率提升40%

Qwen3Guard-Gen-8B在电商评论审核中的落地实践&#xff1a;准确率提升40% 在某头部电商平台的运营后台&#xff0c;每天涌入超过百万条用户评论。这些内容中&#xff0c;大多数是真诚的反馈&#xff0c;但也有隐藏极深的恶意攻击、变相广告和情绪煽动——它们不带脏字&#xff…

临时文件自动化管理方案技术

背景与需求分析临时文件的定义与常见类型&#xff08;缓存、日志、下载文件等&#xff09;未规范管理的风险&#xff1a;存储空间浪费、安全隐患、性能下降自动化管理的核心目标&#xff1a;效率提升、资源优化、安全合规技术方案设计文件生命周期策略创建时间、最后访问时间、…

Qwen3Guard-Gen-8B能否识别AI生成的钓鱼邮件?

Qwen3Guard-Gen-8B能否识别AI生成的钓鱼邮件&#xff1f; 在企业邮箱每天收到成百上千封消息的今天&#xff0c;一条看似来自“财务部”的通知——“请立即核对报销单&#xff0c;否则本月薪资将延迟发放”——可能并不是同事的提醒&#xff0c;而是一封由AI精心炮制的钓鱼邮件…

Qwen3Guard-Gen-8B能否识别AI生成的诈骗话术?

Qwen3Guard-Gen-8B能否识别AI生成的诈骗话术&#xff1f; 在智能客服自动回复用户、虚拟助手撰写邮件、AI写作工具生成营销文案的今天&#xff0c;我们越来越难分辨一段文字是否出自人类之手。而更令人担忧的是&#xff0c;这种“类人表达”正被恶意用于制造高伪装性的诈骗内容…

CH340芯片在STM32下载器中的驱动配置实例

用CH340搭一个STM32下载器&#xff1f;别再被驱动和串口坑了&#xff01; 你有没有遇到过这种情况&#xff1a;手头有个STM32板子&#xff0c;程序写好了&#xff0c;却卡在烧录这一步——没有ST-Link&#xff0c;也没有J-Link&#xff0c;甚至连个调试接口都焊上了&#xff1…

使用Keil4开发工业温控系统:从零实现

从零搭建工业级温控系统&#xff1a;Keil4实战全解析你有没有遇到过这样的场景&#xff1f;设备温度飘忽不定&#xff0c;加热到设定值后猛冲过头&#xff0c;然后又慢慢回落&#xff0c;反复震荡——这不只是“小问题”&#xff0c;在化工反应釜、恒温培养箱或精密烘箱里&…

嵌入式项目中STM32的RS485测试应用实例

STM32 RS485通信实战&#xff1a;从硬件连接到Modbus从机测试的完整避坑指南你有没有遇到过这样的情况&#xff1f;STM32代码写得没问题&#xff0c;串口能发能收&#xff0c;但一接到RS485总线上就“时通时不通”&#xff0c;主机轮询时偶尔丢帧、CRC校验失败&#xff0c;甚至…

Qwen3Guard-Gen-8B如何满足GDPR数据保护要求?

Qwen3Guard-Gen-8B 如何满足 GDPR 数据保护要求 在生成式人工智能&#xff08;AIGC&#xff09;快速渗透内容创作、智能客服和社交平台的今天&#xff0c;一个现实问题日益凸显&#xff1a;如何确保 AI 不仅“聪明”&#xff0c;而且“守规矩”&#xff1f;尤其是在欧盟《通用数…

工业级调试器STLink接口引脚图适配要点(快速理解)

工业级调试器STLink接口引脚图适配要点&#xff08;快速理解&#xff09;在嵌入式系统开发中&#xff0c;尤其是基于STM32这类ARM Cortex-M系列MCU的项目里&#xff0c;一个稳定可靠的调试连接往往是决定开发效率的关键。而STLink作为ST官方推出的调试工具&#xff0c;凭借其高…

利用Multisim进行前仿真实现Ultiboard后验证项目应用

仿真驱动设计&#xff1a;用 Multisim 做前仿&#xff0c;Ultiboard 完成后验证的实战闭环你有没有经历过这样的场景&#xff1f;辛辛苦苦画完原理图、打样PCB、焊好板子&#xff0c;上电一测——输出波形不对&#xff0c;噪声满天飞&#xff0c;甚至芯片直接冒烟。回头再改版&…

驱动中解析设备树子节点:项目应用

驱动中解析设备树子节点&#xff1a;从原理到实战的深度实践你有没有遇到过这样的场景&#xff1f;客户突然要求在现有工业网关上加一个PM2.5传感器&#xff0c;而硬件团队已经改了板子、换了IC地址&#xff0c;甚至电源控制引脚也变了。结果呢&#xff1f;你得翻出一年前写的驱…

工业控制系统搭建前的固件准备指南

工业控制系统搭建前的固件准备&#xff1a;从“找不到芯片”说起 你有没有遇到过这样的场景&#xff1f; 打开 STM32CubeMX&#xff0c;信心满满地准备开始新项目&#xff0c;输入 STM32F407 搜索目标芯片——结果搜索框下方一片空白。 再试一次&#xff1f;还是没反应。 …

工业控制设备PCB板生产厂商实战案例分析

工业控制设备PCB制造实战&#xff1a;一家技术型厂家的破局之道你有没有遇到过这样的情况&#xff1f;一款工业PLC主控板&#xff0c;硬件设计没问题&#xff0c;软件逻辑也跑得通&#xff0c;可一到现场就频繁通信丢包&#xff1b;或者伺服驱动器在高温车间连续运行三个月后&a…

Qwen3Guard-Gen-8B如何监控增量生成过程中的风险?

Qwen3Guard-Gen-8B如何监控增量生成过程中的风险&#xff1f; 在大模型驱动的智能应用日益普及的今天&#xff0c;内容安全已不再是“可选项”&#xff0c;而是决定产品能否上线、企业是否合规的生命线。从社交媒体到教育平台&#xff0c;从客服机器人到创作工具&#xff0c;任…

STM32与PC通信波特率不匹配的快速理解

STM32与PC串口通信总乱码&#xff1f;别急&#xff0c;99%的问题都出在波特率匹配上你有没有遇到过这种情况&#xff1a;STM32明明发了数据&#xff0c;PC端串口助手却显示一堆“烫烫烫”或乱码字符&#xff1f;重启几次偶尔能通&#xff0c;但一运行久又断了。调试信息全靠猜&…

如何快速掌握LocalStack:开发者的完整实战指南

如何快速掌握LocalStack&#xff1a;开发者的完整实战指南 【免费下载链接】localstack &#x1f4bb; A fully functional local AWS cloud stack. Develop and test your cloud & Serverless apps offline 项目地址: https://gitcode.com/GitHub_Trending/lo/localstac…