使用struts相关组件上传附件(org.apache.commons.fileupload.*)上传附件--详解

文件上传——FileUpLoad—基于apache提供的commons组件提供的上传组件 文件上传 一、需求 将文件上传到指定目录中 二、附加需求 若上传的文件名相同,则产生一个不重复的文件名进行上传,如何处理? 若是只能上传图片文件,又该怎么进行处理? 三、大体思路 1、在进行文件上传之前,我们需要导入文件上传的所需jar包,如下图: 2、我们还需要一个能够提交表单的html网页,并且类型必须为文件提交表单,即必须在网页中设置form的enctype=“multipart/... 阅读详情

       文件上传在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件上传功能。

      common-fileupload组件是apache的一个开源项目之一,可以从apache上下载。用该组件可实现一次上传一个或多个文件,并可限制文件大小。http://jakarta.apache.org/commons/fileupload/(包地址)

     下载后解压zip包,将commons-fileupload-1.0.jar复制到tomcat的webapps/你的webapp/WEB-INF/lib/下,目录不存在请自建目录。
新建一个servlet: Upload.java用于文件上传:

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;

public class Upload extends HttpServlet {

    private String uploadPath = "C://upload//"; // 上传文件的目录
    private String tempPath = "C://upload//tmp//"; // 临时文件目录

    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws IOException, ServletException
    {

          doPost(request,response);
    }

    //在doPost()方法中,当servlet收到浏览器发出的Post请求后,实现文件上传。以下是示例代码:

    public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
    try {
        DiskFileUpload fu = new DiskFileUpload();
        // 设置最大文件尺寸,这里是4MB
        fu.setSizeMax(4194304);
        // 设置缓冲区大小,这里是4kb
        fu.setSizeThreshold(4096);
        // 设置临时目录:
        fu.setRepositoryPath(tempPath);

        // 得到所有的文件:
        List fileItems = fu.parseRequest(request);
        Iterator i = fileItems.iterator();
        // 依次处理每一个文件:
        while(i.hasNext()) {
            FileItem fi = (FileItem)i.next();
            // 获得文件名,这个文件名包括路径:
            String fileName = fi.getName();
            // 在这里可以记录用户和文件信息
            // ...
            // 写入文件,暂定文件名为a.txt,可以从fileName中提取文件名:
            fi.write(new File(uploadPath + "a.txt"));
        }
    }
    catch(Exception e) {
        // 可以跳转出错页面
    }
}

 //如果要在配置文件中读取指定的上传文件夹,可以在init()方法中执行:
public void init() throws ServletException {
    uploadPath = ....
    tempPath = ....
    // 文件夹不存在就自动创建:
    if(!new File(uploadPath).isDirectory())
        new File(uploadPath).mkdirs();
    if(!new File(tempPath).isDirectory())
        new File(tempPath).mkdirs();
}

}

     编译该servlet,注意要指定classpath,确保包含commons-upload-1.0.jar和tomcat/common/lib/servlet-api.jar。
配置servlet,用记事本打开tomcat/webapps/你的webapp/WEB-INF/web.xml,没有的话新建一个。
典型配置如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <servlet>
        <servlet-name>Upload</servlet-name>
        <servlet-class>Upload</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Upload</servlet-name>
        <url-pattern>/fileupload</url-pattern>
    </servlet-mapping>
</web-app>
配置好servlet后,启动tomcat,写一个简单的html测试:
<form action="fileupload" method="post"
enctype="multipart/form-data" name="form1">
  <input type="file" name="file">
  <input type="submit" name="Submit" value="upload">
</form>
注意action="fileupload"其中fileupload是配置servlet时指定的url-pattern。

Apache Commons FileUpload CVE-2023-24998漏洞原理与免费修复实战 在Java Web应用开发中,文件上传是常见的功能需求,而Apache Commons FileUpload组件因其易用性被广泛集成于Struts2、Spring MVC等框架中。其核心原理是通过解析multipart/form-data请求,将数据流分割为独立的表单字段和文件项。然而,组件内部解析逻辑的缺陷可能导致严重的安全风险,例如拒绝服务攻击,攻击者通过构造恶意请求参数,可触发低效的循环算法,大量消耗服务器CPU资源,影响服务可用性。这种漏洞的技术价值在于揭示了依赖库安全维护的重要性,以及如何通过版本 阅读详情

相关推荐

Java Web毕业设计实战:基于JSP+Struts2+Spring+MySQL的宠物网站开发

Java Web开发是构建企业级应用的核心技术体系,其核心在于通过MVC架构实现业务逻辑、数据与展示的分离。Spring框架通过控制反转和依赖注入管理对象生命周期,实现组件解耦;Struts2作为控制器负责请求分发与处理;JSP则承担视图层渲染,结合MySQL完成数据持久化。这种分层架构的价值在于提升代码可维护性、可扩展性,是理解Web应用从请求到响应完整闭环的经典实践。在宠物领养、电商等业务场景中,此类技术组合能有效支撑用户管理、商品信息CRUD、订单流程等核心功能。本文以宠物网站为例,详细解析如何整合S

weixin_34375251的博客 459

程序包org.apache.commons.fileupload不存在

程序包org.apache.commons.fileupload不存在 1.问题描述 程序运行报错: Error:(7, 1) java: 程序包org.apache.commons.fileupload不存在 Error:(8, 1) java: 程序包org.apache.commons.fileupload.servlet不存在 Error:(9, 1) java: 程序包org.ap...

AlwaySimple的博客 3万+

Synopys 验证系列-EDA 总结

VC Formal 解决方案包括一整套正式应用程序 (App),包括属性验证 (FPV)、自动提取属性 (AEP)、覆盖分析器 (FCA)、连接性检查 (CC)、时序等效性检查 (SEQ)、寄存器验证 (FRV)、测试平台分析仪 (FTA)、形式导航器 (NAV) 以及用于验证标准总线协议的一组断言 IP (AIP)。

qq_41289491的博客 1427

文件上传出现org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException的解决办法

产生这个问题的原因: 由于common-fileupload组件默认最大支持上传文件的大小为2M,当我们上传大于2M的文件时,就会出现上面的异常。是这个异常的发生导致了fileUpload拦截器没有机会执行,所以看到的是页面没有任何变化,也没有任何提示信息,只是在控制台打印出了上面的异常。 解决办法: 在struts.properties文件中把struts.multipart.maxSiz...

六月星海的博客 1万+

从网格划分到端口接地:一份给ADS新手的Momentum RF仿真避坑实操指南

本文为ADS新手提供Momentum RF仿真的实用指南,涵盖网格划分、端口接地、特殊结构处理等关键设置技巧。通过30-50 cells/λ原则、1/10波长限制等黄金法则,帮助用户平衡仿真精度与效率,避免常见错误,提升电磁仿真结果的准确性。

weixin_33692284的博客 506

RC电路(一):微分|积分

的取值不同,会导致输出波形和输入波形之间的关系也不同,由此也会产生不同的应用。输出为0,随着电容充满电,运放-输入端得到的分压为正最大值,可等效成一个电压源,且电压不可突变,此时电流反向为最大值,开始充电时的容抗为0,电压不可突变则电压差为0,运放。开始充电时的容抗为0,电压不可突变则电压差为0,运放。输入端得到的分压也不可突变,随着电容放完电,于是。,因电容上电压不能突变(来不及充电,相当于短路,由上分析可得积分运算电路中,输出为运放的负最大峰值,随着电容充满电,输出为运放的正最大峰值,随着电容放完电,

既有随处可栖的江湖,也有追风逐梦的骁勇! 1万+

使用org.apache.commons.fileupload,在SpringMVC框架中实现带进度条上传多个文件(Java实现)

最近使用org.apache.commons.fileupload,在SpringMVC框架下做了一个带进度条上传文件功能,做个备忘,顺便分享给大家。 上次前的效果为: 上次后的效果: 项目目录结构为: 前端代码为: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncod...

一火的专栏 862

基于STM32L4XX、HAL库的BQ25713RSNR充电芯片驱动程序设计

define BQ25713_I2C_ADDR (0x6B << 1) // 7位地址为 0x6B,HAL库需要左移一位。// 示例:配置 CHARGE_OPTION_0 寄存器:使能充电,使能 ICO(输入电流优化)reg_data |= (EN_CHG_MASK | EN_ICO_MASK);

zhusl6688的博客 406

文件处理:使用Apache Commons FileUpload处理文件

1.背景介绍 在现代互联网应用中,文件处理是一个非常重要的功能。用户可能需要上传各种类型的文件,如图片、音频、视频、文档等。为了实现这个功能,我们需要使用一些专业的文件处理库。 Apache Commons FileUpload是一个非常流行的Java文件处理库,它可以帮助我们轻松地处理文件上传。在这篇文章中,我们将深入了解Apache Commons FileUpload的核心概念、算法原理...

AI天才研究院 1749

【MATLAB】STM32电机调速闭环控制工程

本文提出了一种基于MATLAB仿真与STM32实现的直流电机闭环PID调速控制方案。通过MATLAB建立电机数学模型并进行参数整定,仿真验证了增量式PID算法在启停、稳态和抗扰动方面的优越性能。基于STM32F103搭建了硬件系统,实现了编码器测速、定时中断控制、PWM输出等功能。实测表明,该系统转速超调<2%、稳态误差±2r/min,具备快速响应和强抗扰能力。相比开环控制,闭环调速显著提升了动态性能和稳态精度。方案提供了完整的仿真代码和嵌入式工程源码,可直接应用于智能小车、工业传动等场景,具有较高的

unber的博客 50

AD9361功能介绍和使用

AD9361使用分数分频锁相环(PLL)来产生发射机和接收机本地振荡器(LO)频率和BB PLL。BB PLL 可用于数据转换、数字滤波器和 |/O 端口。PLL的参考时钟可以由外部振荡器或外部晶体(XO)和数字可编程片内可变电容提供,电容微调产生参考时钟频率,XO和微调电容的组合统称为DCXO。有多个天线输入的分集系统。接收链数据首先经过低噪声放大器(LNA),然后是同相(1)和正交(Q)放大器,混频器和频带整形滤波器,可将接收到的信号下变频为基带以进行数字化。时分双工(TDD)和频分双工(FDD)。。。

wangjie36的博客 1万+

struts中使用org.apache.commons.fileupload

struts的DownloadAction使用后发现,当我提取中文名的文件时,会转换成乱码(弹出的对话框为乱码),可能还没有研究明白,所以考虑用smartupload和commons-fileupload。 使用smartupload上传过大文件,或者多文件的时候可能出现CPU或内存占用过高的问题.并且:只有重新启动容器才能恢复正常!后决定用用commons-fileupload. 下载:下载...

qingfengxia2013的专栏 221

LeetCode --- 937. Reorder Data in Log Files 解题报告

You are given an array oflogs. Each log is a space-delimited string of words, where the first word is theidentifier. There are two types of logs: Letter-logs: All words (except the identifier) consist of lowercase English letters. Digit-logs: All word..

杨鑫newlife的专栏 426

CVE-2016-1000027:Apache Commons FileUpload DoS漏洞原理、案例与修复指南

文件上传是Web开发中的基础功能,通常通过HTTP协议的multipart/form-data格式实现。其原理是将表单数据和文件内容编码为多个部分进行传输,服务器端需要专门的库进行解析。Apache Commons FileUpload作为Java生态中广泛使用的解析库,其核心价值在于高效处理复杂请求体。然而,在特定场景下,库的解析逻辑缺陷可能导致严重的技术风险。CVE-2016-1000027正是一个典型案例,该漏洞源于库在解析恶意构造的畸形multipart请求时,对输入流的处理存在缺陷,可能陷入无限循

weixin_30564901的博客 302

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Struts2高危漏洞CVE-2016-1000027的自动化检测与修复实战

Java反序列化漏洞是Web应用安全领域的核心威胁之一,其原理在于攻击者通过构造恶意序列化数据,在目标系统反序列化过程中触发任意代码执行。这类漏洞技术价值极高,常导致服务器被完全接管,广泛存在于Struts2、Fastjson等主流框架中。在应用场景上,组件依赖漏洞尤其隐蔽,例如Apache Commons FileUpload库的安全缺陷,即使应用未显式使用文件上传功能也可能被间接利用。针对CVE-2016-1000027这类历史高危漏洞,传统手动排查耗时耗力,而现代AI驱动的安全平台能够实现白盒扫描、精

weixin_30256901的博客 399

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Struts 文件上传(UpLoad)

刚刚做了三个文件上传的Demo a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现 c.在sturts2中实现 现在把Code与大家分享一下.. 注:此为三个简单Demo,仅供练习用,并没有做太多上传限制 如有兴趣可以自行查看相关文档说明 一.在JSP环境中利用Commons-fileupload组件实现文件上传 1.页面upload.jsp清单如下...

gdf84的博客 214

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jsp\struts1.2\struts2 中文件上传

刚刚做了三个文件上传的Demo a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现 c.在sturts2中实现 现在把Code与大家分享一下.. 注:此为三个简单Demo,仅供练习用,并没有做太多上传限制 如有兴趣可以自行查看相关文档说明 一.在JSP环境中利用Commons-fileupload组件实现文件上传    1.页面upload.jsp清...

yuancandy的专栏 114

java文件上传失败_java文件上传错误

警告:Unabletoparserequestorg.apache.commons.fileupload.FileUploadBase$IOFileUploadException:Processingofmultipart/form-datarequestfailed.Streamendedunexpectedlyatorg.apac...警告: Unable to parse requestor...

weixin_35024589的博客 1106

struts2.0----菜鸟日记二

看到视频很多都是用的sturts2.0 的包 我下载了个最新版本的2.1回来写个简单的例子结果 nable to load configuration. - bean - jar:file:/D:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/Struts2.0/WEB-INF/lib/struts2-c

kangojian的专栏 2621

java jxl生成报表_JXL组件生成报表报错(一)

JXL组件生成报表1、具体报错如下usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help | start | stop }2014-5-3 17:14:13 org.apache.catalina.core.AprLifecycleListener init信息: ...

weixin_32139169的博客 99

struts2 2.3.1.1启动异常原因

Exception starting filter struts2 java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils 2012-01-22 23:07 Exception starting filter struts2 java.lang.NoClassDefFoundError: org/ap...

gzg0142的博客 170

基于sturts2.1.6的项目文件部署到tomcat6.0之后,服务器启动时报错:严重: Error filterStart

学习struts2.0,尝试手动建立一个简单项目有,结构如下 struts2qs      | — WEB-INF      |         | — classes(包含struts.xml)      |         | — lib      |         | — web.xml      |       | — login.jsp 其中li

hyp3353的专栏 3611

基于sturts2.1.6的项目文件部署到tomcat6.0之后,服务器启动时报错:严重: Error filterStar...

学习struts2.0,尝试手动建立一个简单项目有,结构如下   struts2qs       | — WEB-INF       |         | — classes(包含struts.xml)       |         | — lib       |         | — web.xml       |       | — login.jsp   其中l...

简单.专注.. 205

Tomcat Web应用开发避坑指南:从部署到性能调优的实战经验

在Java Web开发中,Servlet容器是承载应用运行的核心环境,其工作原理直接决定了应用的稳定性和性能表现。理解容器的类加载机制、请求处理模型和内存管理原理,对于构建健壮的企业级应用至关重要。这些底层机制的技术价值在于,它们为应用提供了隔离性、并发处理能力和资源管理的基础。在实际应用场景中,从简单的单体应用到高并发的分布式系统,都需要基于这些原理进行合理的配置与优化。本文将围绕Tomcat这一广泛使用的Servlet容器,结合线程池配置和内存泄漏等常见热词,深入剖析在部署、配置、编码和运维环节中容易遇

weixin_34185512的博客 402

报错:java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory

但是明明已经正确地导入了commons-io-1.4.jar和commons-fileupload-1.2.1.jar。解决办法:将这两个jar包再放到Tomcat文件夹的lib文件夹里

m0_73520938的博客 1054
上一篇: ThreadLocal
下一篇: Thread的run方法和start方法
soltex
博客等级 码龄23年 4粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值