commons-uploadFile上传文件实例

微信小程序文件上传java服务器端wx:uploadFile() 话不多说,直接上图。 import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache 阅读详情

1.在web工程中引入两个jar文件:commons-fileupload-1.1.1.jar和commons-io-1.3.1.jar

2.创建一个servlet文件upload.java

upload.java code:

package myweb;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import myweb.DBConnection;
import java.sql.*;
import java.net.InetAddress;
import java.util.Calendar;

/**
 *
 * @author zhupan
 *
 */
public class upload extends HttpServlet {
    public upload() {
        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        response.setContentType("text/html; charset=GB2312");
        PrintWriter out = response.getWriter();
        String type = request.getParameter("type"); //上传文件的类型
        try {
            DiskFileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload sevletFileUpload = new ServletFileUpload(factory);
            // 设置允许用户上传文件大小,单位:字节,这里设为2m
            //sevletFileUpload.setSizeMax(2 * 1024 * 1024);
            // 设置最多只允许在内存中存储的数据,单位:字节
            factory.setSizeThreshold(4096);
            // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
            factory.setRepository(new File("d://temp"));
            // 开始读取上传信息
            List fileItems = sevletFileUpload.parseRequest(request);
            // 依次处理每个上传的文件
            Iterator iter = fileItems.iterator();
            // 正则匹配,过滤路径取文件名
            String regExp = ".+////(.+)$";
            // 过滤掉的文件类型
            String[] errorType;
            if (type.equals("1")) { //文本文件
                errorType = new String[] {".exe", ".com", ".cgi", ".ini",
                            ".sys",
                            ".bat", ".asp", ".jsp", ".jpg", ".gif",
                            ".bmp",
                            ".dll", ".html", ".htm", ".java", ".class", ".zip",
                            ".rar", ".avi", ".mp3", ".wmv", ".txt"};
                sevletFileUpload.setSizeMax(2 * 1024 * 1024);
            } else if (type.equals("2")) { //应用软件
                errorType = new String[] {".com", ".cgi", ".ini",
                            ".sys",
                            ".bat", ".asp", ".jsp", ".jpg", ".gif",
                            ".bmp",
                            ".dll", ".html", ".htm", ".java", ".class", ".avi",
                            ".mp3", ".wmv", ".doc", ".xls", ".txt", ".rtf",
                            ".txt"};
                sevletFileUpload.setSizeMax(20 * 1024 * 1024);
            } else if (type.equals("3")) { //音乐文件
                errorType = new String[] {".com", ".cgi", ".ini",
                            ".sys",
                            ".bat", ".asp", ".jsp", ".jpg", ".gif",
                            ".bmp",
                            ".dll", ".html", ".htm", ".java", ".class", ".doc",
                            ".xls", ".txt", ".rtf", ".rar", ".zip", ".txt"};
                sevletFileUpload.setSizeMax(10 * 1024 * 1024);
            } else { //
                errorType = new String[] {".exe", ".com", ".cgi", ".ini",
                            ".sys",
                            ".bat", ".asp", ".jsp", ".dll", ".html", ".htm",
                            ".java", ".class", ".txt"};
                sevletFileUpload.setSizeMax(5 * 1024 * 1024);
            }
            Pattern p = Pattern.compile(regExp);
            out.print("<html>");
            out.print("<head><title>上传提示页</title>");
            out.print(
                    "<link rel=stylesheet href=../css/treecss.css type=text/css></head>");
            out.print("<body bgcolor=#f7ffff>");
            out.print("<div align=center><table width=98% cellpadding=5 cellspacing=1><tr><td align=left class=td1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#2E75BB><b>上传文件提示</b></font></td></tr></table></div>");
            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();

                // 忽略其他不是文件域的所有表单信息
                if (!item.isFormField()) {
                    String name = item.getName();
                    long size = item.getSize();
                    if ((name == null || name.equals("")) && size == 0)
                        continue;
                    Matcher m = p.matcher(name);

                    boolean result = m.find();
                    if (result) {
                        for (int temp = 0; temp < errorType.length; temp++) {
                            if (m.group(1).endsWith(errorType[temp])) {
                                out.print("");
                                out.print("");
                                throw new IOException(name + ": 非法文件类型禁止上传");
                            }
                        }
                        try {
                            // 保存上传的文件到指定的目录
                            // 在下文中上传文件至数据库时,将对这里改写开始

                            out.print(
                                    "<div align=center><table width=98% cellpadding=5 cellspacing=1>");
                            out.print(
                                    "<tr><td align=left ><img src='../img/tp001.gif'>&nbsp;<b>上传成功</b></td></tr>");
                            out.print("<tr><td>文件名:" + name + "</td></tr>");
                            out.print("<tr><td>文件大小:" + size / 1024 +
                                      "KB</td></tr>");
                            out.print("<br>");
                            out.print("</table></div>");
                            Calendar c = Calendar.getInstance();
                            String n = c.toString().substring(33, 46);
                            String r = item.getName();
                            r = r.substring(r.lastIndexOf("."));
                            String a = n.concat(r);
                            if (type.equals("1")) { //表单
                                item.write(new File("d://myweb//E-gov//uploadfile//table//" +a));
                            } else if (type.equals("2")) {//应用软件
                                item.write(new File("d://myweb//E-gov//uploadfile//soft//" +a));
                            } else if (type.equals("3")) { //音乐
                                item.write(new File("d://myweb//E-gov//uploadfile//music//" +a));
                            } else {
                                item.write(new File("d://myweb//E-gov//uploadfile//temp//" +a));
                            }
                            String t_name = name.substring(name.lastIndexOf("//") + 1);
                            Connection con = null;
                            con = DBConnection.getConnection();
                            Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
                            if (type.equals("1")) { //表单
                                stmt.execute("insert into resource (table_name,ADDRESS,SIZE,DOWNLOAD_TIMES,type) values('" +t_name + "','" + a + "','" +size / 1024 + "',0,1)");
                            } else if (type.equals("2")) {
                                stmt.execute("insert into resource (table_name,ADDRESS,SIZE,DOWNLOAD_TIMES,type) values('" +t_name + "','" + a + "','" +size / 1024 + "',0,2)");
                            } else if (type.equals("3")) { //音乐
                                stmt.execute("insert into resource (table_name,ADDRESS,SIZE,DOWNLOAD_TIMES,type) values('" +t_name + "','" + a + "','" +size / 1024 + "',0,3)");
                            } else {
                                stmt.execute("insert into resource (table_name,ADDRESS,SIZE,DOWNLOAD_TIMES,type) values('" +t_name + "','" + a + "','" +size / 1024 + "',0,0)");
                            }
                            stmt.close();
                            con.close();

                            // 在下文中上传文件至目录时,将对这里改写结束
                        } catch (Exception e) {
                            out.println(e);
                        }
                    } else {
                        throw new IOException("fail to upload");
                    }
                }
            }
            out.print("</body></html>");
        } catch (IOException e) {
            out.println(e);
        } catch (FileUploadException e) {
            out.println(e);
        }
    }

    private void jbInit() throws Exception {
    }
}
3.html页面

<html>
  <head>
    <title>upload</title>
    <link  rel="stylesheet" href="../css/common.css" type="text/css"/>
    <script language=JavaScript type="">
      function fAddAttach(m){
        var gAttchHTML='<div class="tdtext"></div><div class="le"><input type="file" name="attachfile[]" class="box" size=40><input type="button" name="Submit" value="/u522a/u9664" class="box" id="btnDeleteReadAttach" /></div><span></span>';
        var Attach=document.getElementById("dvReadAttach"+m);
        var spnList=Attach.getElementsByTagName("SPAN");
        var spn=document.createElement("DIV");
        spn.className="qrc4";
        spn.innerHTML=gAttchHTML;
        spn.childNodes[1].childNodes[0].name="attachfile[]" + spnList.length;
        Attach.appendChild(spn);
        fGetObjInputById(spn,"btnDeleteReadAttach").onclick=function(){fDeleteAttach(this,m);};
        document.getElementById("aAddAttach"+m).innerHTML="继续添加";
        Attach.style.display="";
      }
      function fGetObjInputById(obj,id){
        var inputList=obj.getElementsByTagName("INPUT");
        for(var i=0;i<inputList.length;i++){
          if(inputList[i].id==id){
            return inputList[i];
          }
        }
        return null;
      }
      function fDeleteAttach(obj,m){
        try{
          obj.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode);
          var Attach=document.getElementById("dvReadAttach"+m);
          var spnList=Attach.getElementsByTagName("SPAN");
          if(spnList.length==0){
            document.getElementById("aAddAttach"+m).innerHTML="继续添加";
            Attach.style.display="none";
          }else{
            document.getElementById("aAddAttach"+m).innerHTML="继续添加";
          }
        }catch(exp){
        }
      }
      </script>
      </head>
      <body>
        <div align="center">
          <table width="98%" cellpadding="5" cellspacing="1">
            <tr><td align=left class="td1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#2E75BB><b>常用表格单据上传</b></font></td></tr>
            <tr><td>提示信息:</td></tr>
            <tr><td>1.单击“浏览”选择需要上传服务器端的表格单据文件,路径选择完成后单击“上传”完成文件上载。</td></tr>
            <tr><td>2.常用表格单据上传功能仅支持后缀为doc/docx/xls/pdf的文件。</td></tr>
            <tr><td>3.由于存储空间限制,该功能暂限制单个上传文件最大为2m。</td></tr>
            <form action="upload?type=1" name="uploadform" method="POST" enctype="multipart/form-data">
              <tr><td><div id="dvReadAttach1" style="display:none"></div><a href="javascript:fAddAttach(1);" id="aAddAttach1">添加文件</a><br>
                <input type="submit" name="upload" value="上 传" class="submit" onclick="javascript:return confirm('您确认要上传此文件?')"></td></tr>
              </form>
            </table>
          </div>
        </body>
      </html>

4.配置web.xml

目录结构:../E-gov/resource/upload.html

                    ../myweb/upload.java

<servlet>
    <servlet-name>upload</servlet-name>
    <servlet-class>myweb.upload</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>upload</servlet-name>
    <url-pattern>/resource/upload</url-pattern>
  </servlet-mapping>

掌握Apache Commons FileUpload进行文件上传 对于某些特定需求,可能需要修改ServletFileUpload默认的解析策略。比如,当上传文件数量非常大或单个文件非常大时,默认的解析策略可能不适用。// 示例代码 - 自定义解析策略// 设置仓库大小上限// 设置请求大小上限// 尊重请求体编码// 添加自定义项处理器,例如重命名上传的文件// 实现文件重命名逻辑});在自定义解析策略时,需要考虑请求体的最大大小、存储仓库的大小限制以及是否尊重请求体的编码。 阅读详情

相关推荐

睿尔曼超轻量仿人机械臂--机械臂接口介绍

本文介绍了睿尔曼超轻量仿人机械臂的控制器接口及末端接口。

realman_Rop的博客 3434

微信小程序实现图片上传

图片上传是常见功能,在微信小程序中怎么实现呢? 介绍两个api wx.chooseImage - 选择图片 从本地相机中选择图片 -wx.chooseImage(Object object) | 微信开放文档 上传-UploadTask | 微信开放文档 单张图片上传 wx.chooseImage({ count: 1, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], succe...

哆来A梦没有口袋的博客 5696

ComfyUI中一个超好用的变量管理类节点-KJNodes

在AI绘图中,ComfyUI的热度开始慢慢起来一些,但是这个软件在使用的过程中,需要很多连线,仅仅一个最简单的动画生成,就需要连接这么多线条,而且有些线会飞的很远,看起来就很不美观,尤其是一些复杂工作流,连接到最后自己可能已经分不太清楚到底连接好了没有。今天在研究C站的大佬们的工作流的时候,发现一个有意思的工作流,看起来大概是这种感觉:干净整洁。他用到了KJNodes这么个节点来管理变量,git上星标也不算很多,所以我想很多朋友可能还不知道,所以这里简单介绍下用法。

聚梦小课堂 7519

commons-fileUpload实现文件上传下载

目录 一、文件上传 二、文件下载 一、文件上传 (1).简介     commons-fileUpload上传组件是Apache的一个开源项目,可以到http://commons.apache.org/proper/commons-fileupload/下载最新版本(该组件需要commons-io包的支持)。该组件使用方便,同样可以实现一个或多个文件的上传,也可实现限制上传文件大小等功能...

淋雨一直走啊 6350

Ansys Zemax导入CAD文件避坑指南:STL/STEP/IGES格式选择与性能优化

本文深度解析了在Ansys Zemax中导入CAD文件的核心要点与性能优化策略。针对STL、STEP、IGES等主流格式,详细对比了其几何表示、精度与适用场景差异,并提供了基于模型特征的格式选择决策树。文章重点分享了体元、弦公差等高级参数的调优技巧,以及处理复杂装配体和避免精度陷阱的实战指南,旨在帮助光学工程师提升仿真效率与结果可靠性。

weixin_29202687的博客 436

视觉开发板—K210自学笔记(三)--点亮LED

K210点亮LED灯

adamsecond 3412

用commons-uploadfile上传文件

&lt;form enctype="multipart/form-data" action="upload" name="uploadForm" method="post"&gt; 文件:&lt;input type="file" name="fileOne" size="40"/&gt; &lt;textarea

naruto_Mr的专栏 249

RV1126开发板性能实测:网络、温度与功耗全解析

本文对RV1126开发板进行了全面的性能实测,重点分析了网络性能、温度表现与功耗特性。测试发现UDP带宽可达500Mbps,但TCP性能受限于协议栈;散热设计对持续性能至关重要,大板子在AI推理和视频推流中表现更稳定。为嵌入式开发者提供了真实的选型参考和优化建议。

d3e4f的博客 264

Commons-FileUpload组件上传文件

补充说明:1、文件未上传完之前,页面是不会跳转的2、request.getRequestDispatcher(url).forward(request,response)方法跳转后,它后面的代码仍会继续执行,除非return;3、表单伪造submit元素可以,但是submit表单元素的id切记,不要命名为submit转载部分:https://www.cnblogs.com/d...

weixin_33853794的博客 245

MATLAB基础应用精讲-【数模应用】游程检验(附MATLAB、R语言和python代码实现)

游程检验是一种非参数性统计假设的检验方法,它是游程总数检验和最大游程检验的总称,用于两个独立样本的比较和观测结果随机性的检验测试。​游程检验亦称“连贯检验”,是根据样本标志表现排列所形成的游程的多少进行判断的检验方法。[2]例1:设某样本n=12人的标志表现为男、女,有以下三种排列。(i) 男\男,女\女\女,男,女\女,男\男\男\男;(ii) 男\男\男\男\男\男\男,女\女\女\女\女;(iii) 男,女,男,女,男,女,男,女,男,女,男\男;连续出现男或女的区段称为游程。

qq_36130719的博客 606

昇腾,Ascend,NPU,mindie,镜像,部署vllm:第5篇,昇腾环境下部署蒸馏版deepseek-r1,并在dify中注册模型供应商

这两天没少折腾deepseek-r1。之前在A100上用ollama部署了一份DeepSeek-R1-Distill-Qwen-32B,感觉真的特别慢。现在,再用昇腾部署一遍,看看速度能不能更快。p.s. 类似的内容其实已经写了很多遍了。但感觉之前写得都太碎,不够顺畅。接着新模型写篇长文,把能包括的都包括进来。这样大家也不需要到处翻来翻去。

xiezhipu的博客 2450

FTP 文件夹的上传和下载

【代码】FTP 文件夹的上传和下载。

ChineseSoftware的博客 936

MT4/MT5 第三代移动平均线(MetaTrader 指标)

第三代移动平均线(3G-MA)是传统MA指标的升级版本,通过"时滞压缩"算法将信号滞后降至理论极限(λ=2)。该指标在保留平滑性的同时,信号速度比EMA快1.5-2.3倍,适用于MT4/MT5平台。核心参数包括计算周期(默认34)、滞后压缩系数(2-10)和应用价位选择,支持斜率变色功能。安装简单,无需外部依赖,通过多周期共振可提升12-18%胜率。指标代码包含完整的MT4/MT5实现方案,采用双缓冲计算结构,通过相位前移算法抵消群延迟。风险提示:需配合其他技术指标和严格风控(≤2%账户

JanLEE 579

Spring MVC文件上传教程 commons-io/commons-uploadfile

Spring MVC文件上传教程 commons-io/commons-uploadfile 用到的依赖jar包: commons-fileupload 1.3.1 commons-io 2.4 基于 Spring MVC来实现文件的上传功能,这里主要是实现两个功能:1、上传单个文件并将其移动到对应的上传目录;2、一次上传多个文件并将它们存储在指定文件夹下,接下来我们一步步地实现。 pom.xml...

shshaashsh的博客 1236

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

commons中的uploadFile乱码

以前一般的post乱码 都可以通过字符过滤器来解决,但是表单上传 不知道怎么回事 ,字符过滤器不能让上传的时候起作用。但是uploadFile包提供的有设置编码的地方。 如果是上传项目用这样的写法: DiskFileItemFactory factory = new DiskFileItemFactory();  factory.setRepository(new File("

silence1214的专栏 991

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JSP使用commons-fileupload组件实现文件上传代码示例

这篇文章主要介绍了JSP使用commons-fileupload组件实现文件上传代码示例,具有一定的参考价值,具体内容如下1、准备:将commons-fileupload-1.1.zip和commons-io-1.1.zip复制到"\WEB-INF\lib"目录下2、首先是Servlet:FileUpload.java package servlet; import java.io.File;

小朱 2293

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

FileUpload实现多文件上传与下载

FileUpload实现文件上传与下载简介1. FileUpload2. 准备工作代码1. 文件上传(UploadFile.java)2. 文件上传 (upload_file.jsp)3. 获取文件名列表 (ListFile.java)4. 文件下载 (DownloadFile.java)5. 文件下载 (download_file.jsp)结果演示1. 文件上传2. 文件下载 简介 1. FileUpload   FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境

1182

JSP Commons-FileUpload 组件实现文件上传

目录 1.获取Commons-FileUpload组件的步骤 2.表单的属性设置 3.Commons-FileUpload组件的API 4.编写上传文件处理页的实现步骤 5.实现代码 1.获取Commons-FileUpload组件的步骤 下载Commons-FileUpload组件,即commons-fileupload-1.4-bin 下载Commons-IO组件,即ccommons-io-2.11.0-bin.zip,该组件用于处理文件上传所依赖的I/O操作 2.表单的属性设置 &

qq_57969464的博客 801

Servlet文件上传/上传文件功能的实现(commons-fileupload)

文章目录正常步骤使用 commons-fileupload.jar 实现文件上传 正常步骤 step1 在 form 中,设置 method="post",设置 enctype="multipart/form-data"。enctype 属性用于设置表单的编码方式,对于文件上传,必须设置成"multipart/form-data"。 step2 在 Servlet 类当中,不能够使用 request.getParameter() 方法来获得参数值。要使用 InputStream request.getInp

liaowenxiong的博客 723

java连接ftp服务器————实现上传文件、下载文件

java实现连接FTP服务器,实现文件的上传和下载 最近项目需要使用FTP服务器,来进行文件的上传和下载!本文主要介绍连接FTP服务器,进行文件的上传和下载,至于如何搭建FTP服务器,网上有很多教程,大家可以自行百度!!! 废话不多说,直接上代码: 下面是实现FTP的连接、文件上传以及文件的下载代码: package com.soyuan.wxdemo.utils; import java.io....

weixin_43580683的博客 8065

Struts2文件(图片)上传及页面显示

1、导入文件上传的两个jar包 commons-io-2.5.jar commons-fileupload-1.3.2.jar 2、jsp上传页面代码 上传文件: 3、action中的代码public class UploadFile extends ActionSupport{ pri

CDEC_mengchao的博客 9998

servlet+uploadify+commons-fileupload实现文件上传

先吐槽一下使用那些没有完整API的jar包,一步一个坑,网上很多代码都是有bug的,拿来主义+清除bug!   1.commons-fileupload.jar在servlet中用来处理文件上传,比较简便,(尼玛,早知道用struts了,自己写一大堆什么获取参数,倒腾了好久,struts一个file映射,轻松搞定文件上传啊,为了用servlet实现,倒腾了一晚上。)主要注意在servlet中如何

凡事预则立,不预则废 756

利用commons-fileupload 实现文件上传终极版及commons-fileuplo...

昨天做了一个Servlet实现文件上传的功能,之前没仔细研究过commons-fileupload-1.2.1.jar,就随意网上搜了下例子,草率写完了,测试成功,感觉不错没出什么问题,回来无意之间又看到一篇文章说,用commons-fileupload-1.2.1.jar实现上传文件一定要加...

chuhuangqiao1461的博客 164

使用commons fileupload 上传文件

最近在做项目时候要用到文件上传功能,于是在网上找了一下相关资料,有好多人都用开源的commons fileupload 来上传文件,于是也用这个工具来完成项目需求。结合网上资料及实际项目,做一点点总结,以备后用。 使用commons fileupload 需要注意下面几点 :

qqzhuyuehe的专栏 704
上一篇: ResultSet can not re-read row data
下一篇: 关于SSL
yehell
博客等级 码龄20年 27粉丝 74原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值