关于fileupload的文件上传

package com.insigma.siis.local.pagemodel.tablesmanage;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
import javax.swing.JOptionPane;

import net.sf.json.JSONObject;



import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.jasper.tagplugins.jstl.core.Out;
import org.apache.log4j.Logger;
import com.insigma.odin.framework.AppException;
import com.insigma.odin.framework.persistence.HBSession;
import com.insigma.odin.framework.persistence.HBUtil;
import com.insigma.odin.framework.sys.file.CommonsFileUploadImp;
import com.insigma.odin.framework.sys.file.FileUpload;
import com.insigma.odin.framework.sys.file.FileUploadAccess;
import com.insigma.odin.taglib.html.SysParamTag;
import com.insigma.siis.local.business.entity.DataUpload;
import com.insigma.siis.local.pagemodel.fileupload.DataUploadPageModel;



/**
 * 文件导入通用Servlet类
 * @author jinwei
 * @date 2009-12-15
 */
public class FileUploadServlet extends HttpServlet {
    /**
     * Logger for this class
     */
    private static final Logger logger = Logger.getLogger(FileUploadServlet.class);

    private String defaultBusinessName = "com.insigma.odin.framework.sys.file.DefaultFileUploadAccess";

    public FileUploadServlet() {
        super();
    }


    public void destroy() {
        super.destroy(); 
    }


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

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {    
        String method = request.getParameter("method");
        if(method.equals("impFileAndProcess")){
            impFileAndProcess(request,response);               
        }
        
        if(method.equals("dataUpload")){
            System.out.println("zheli");
            dataUpload(request,response);               
        }
        
    }

    public void init() throws ServletException {
        
    }
    
    /**
     * 导入文件,并做相关业务处理(不对Txt、Excel自动进行解析处理)
     * @param request
     * @param response
     * @throws IOException
     */
    public void impFileAndProcess(HttpServletRequest request, HttpServletResponse response) throws IOException{        
        response.setContentType("text/html");
        response.setCharacterEncoding("GBK");
        PrintWriter out = response.getWriter();
        try {
            Map<?, ?> map;   
            FileUpload upload = new CommonsFileUploadImp();//FileUpload upload = new FileUploadImp();
            String path = getServletContext().getRealPath("/");
            map = upload.upload(request,response,this.getServletConfig(),Integer.MAX_VALUE,path);
            Boolean bool = (Boolean) map.get("result");             
            List<?> list = (List<?>) map.get("filePath");
            List<?> fileNames = (List<?>) map.get("fileName");
            String className = (String)map.get("businessClass");
            String fileid = (String)map.get("fileid");
            if(className==null || className.equals("")){
                className = defaultBusinessName; 
            }
            /********调用业务处理类***********/
            FileUploadAccess fileAccess = (FileUploadAccess)Class.forName(className).newInstance(); 
            Object rtn = fileAccess.accessAfterFileUpload((String)fileNames.get(0)+"_"+fileid, (String)list.get(0),map);
            if(bool.booleanValue()){
                out.println("<script>parent.info(1,'"+JSONObject.fromObject(rtn).toString()+"kjdfhfhfhhf"+"');</script>");
            }else{
                out.println("<script>parent.parent.odin.info('业务操作失败!网络发生异常导致文件无法正常传输。');parent.info(0);</script>");
            }
        } catch (AppException e) {
            logger.info("业务处理发生异常!"+e.toString());
            out.println("<script>parent.parent.odin.info('"+e.toString()+"');parent.info(0);</script>");
            e.printStackTrace();
        } catch (Exception e) {
            logger.info("调用业务类异常!"+e.toString());
            out.println("<script>parent.parent.odin.info('"+e.toString()+"');parent.info(0);</script>");
            e.printStackTrace();
        }
        out.flush();                                                     
        out.close();
    }
    
    public String getDefaultBusinessName() {
        return defaultBusinessName;
    }


    public void setDefaultBusinessName(String defaultBusinessName) {
        this.defaultBusinessName = defaultBusinessName;
    }
    
    /**
     * @author leon
     * 资料上传的方法
     * @throws IOException 
     * @throws FileUploadException 
     */
    public void dataUpload(HttpServletRequest request, HttpServletResponse response) throws IOException{
        String scategory =  request.getParameter("category");
        int category = Integer.parseInt(scategory);
        String shcode =  request.getParameter("hcode");
        int hcode = Integer.parseInt(shcode);
        response.setContentType("text/html;charset=GBK");
        String[] allowedExt = new String[] { "jpg", "jpeg", "gif", "xls","doc", "docx", "mp3", "wma", "m4a" };  
        System.out.println("开始上传");
        PrintWriter out = response.getWriter();
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //String path = getServletContext().getRealPath("/");
        String path = this.getServletConfig().getServletContext().getRealPath("/"); 
        String temp = getServletContext().getRealPath("/") + "upload/temp";   //文件上传临时存储位置
        factory.setRepository(new File(temp));
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setFileSizeMax(10*1024*1024);
        
        
        
            List<FileItem> items = null;
            try {
                items = upload.parseRequest(request);
            } catch (FileUploadException  e1) {
                if(e1 instanceof FileSizeLimitExceededException){
                    out.print("<script>alert('文件上传尺寸超过指定大小');</script>");
                    return;
                }
                e1.printStackTrace();
            }
            
            for(FileItem fi:items){
                if(!fi.isFormField()){
                    try {
                        System.out.println("上传文件的大小:" + fi.getSize());
                        System.out.println("上传文件的类型:" + fi.getContentType());
                        // item.getName()返回上传文件在客户端的完整路径名称
                        
                        
                       
                        //得到文件后缀名
                        String name = fi.getName();
                        HBSession hb = HBUtil.getHBSession();
                        String sql = "select * from net_ae22 where name='"+name+"' and category="+category+"and flag=1 and fid="+hcode;
                        System.out.println(sql);
                        List list = hb.createSQLQuery(sql).list();
                        if(list.size() > 0){
                            out.print("<script>alert('该文件已经上传,请确认。确认要上传,请修改文件名');" +
                                    "</script>");
                            return;
                        }

                        String type= null;
                        if(name.length() > 0 && name != null){
                            int dot = name.lastIndexOf(".");
                            if((dot > -1)&&(dot < name.length()-1)){
                                type=name.substring(dot+1);
                            }
                        }
                        System.out.println("上传文件的名称:" + type);
                        int allowFlag = 0;
                        for(;allowFlag < allowedExt.length; allowFlag++){
                            if(allowedExt[allowFlag].toLowerCase().equals(type.toLowerCase())){
                                break;
                            }
                        }
                        if(allowFlag == allowedExt.length){
                            out.print("<script>alert('请上传doc,xls,jpg文件');</script>");  
                            /*for (allowFlag = 0; allowFlag < allowedExt.length; allowFlag++)  
                                out.println("*." + allowedExt[allowFlag].toLowerCase()  
                                        + "&nbsp;&nbsp;&nbsp;"); */
                            return;
                        }
                        
                        
                        fi.write(new File(path+"/download",fi.getName()));
                        
                        
                        DataUpload du = new DataUpload();
                        du.setId( System.currentTimeMillis());
                        du.setName(fi.getName());
                        du.setType(type);
                        du.setPath(path+"download\\" + fi.getName());
                        du.setFlag(1);
                        du.setFid(hcode);
                        du.setCategory(category);
                        System.out.println(du.getPath());
                        hb.save(du);
                        hb.flush();
                        
                        
                        out.print("<script>alert('恭喜你,上传成功');" +
                                "parent.parent.location.reload();" +
                                "</script>");
                        //request.getRequestDispatcher("DataUpload.jsp");
                        System.out.println("上传结束");
                        
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("上传出错了");
                    }
                }
            }
    
    }
    
    /**
     * 
     * 
     * 
     */
    public HttpServletResponse download(String path,HttpServletRequest request, HttpServletResponse response) {
        try {
            // path是指欲下载的文件的路径。
            File file = new File(request.getRealPath("/")+"/"+path);
            // 取得文件名。
            String filename = file.getName();
            // 取得文件的后缀名。
            //String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

            // 以流的形式下载文件。
            InputStream fis = new BufferedInputStream(new FileInputStream(file));
            byte[] buffer = new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            // 清空response
            response.reset();
            // 设置response的Header
            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("utf-8"),"ISO-8859-1"));
            response.addHeader("Content-Length", "" + file.length());
            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return response;
    }
}

 

  最近在做几个上传文件的功能,用了apache的fileupload组件。

 

转载于:https://www.cnblogs.com/ai03/archive/2013/04/28/3049605.html

HTML批量文件上传3—Servlet批量文件处理FileUpLoad 基于Servlet实现批量文件上传功能,采用Apache Tomcat、FileUpload1.5版本。实现文件批量上传,进度条控制 阅读详情

相关推荐

升级Spring Boot文件上传功能:从commons-fileupload到commons-fileupload2-jakarta

本文将探讨在Spring Boot应用程序中实现文件上传功能的必要性,以及为什么需要从过时的commons-fileupload库升级到现代的commons-fileupload2-jakarta库。我们将提供解决问题的方法和步骤,确保您的应用程序在性能、安全性和兼容性方面保持最佳状态。

专注于深入研究多种编程语言,以实战为导向,逐步拓展开发技能,提升工程化编码和思维能力,展现无敌技术实力。 2765

使用ajaxfileupload实现

这个是转载的. 但是转载是哪里实在是找不到, 只能对不起原创了.

php_byrnes的专栏 514

掌握Apache Commons FileUpload进行文件上传

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

weixin_42527589的博客 1164

金蝶EAS,附件管理,附件上传,单据对应附件相关代码

金蝶EAS,附件上传/查询/删除等操作。 package com.kingdee.eas.custom.jinmao.util; import java.io.File; import java.io.FileInputStream; import com.kingdee.bos.Context; import com.kingdee.bos.BOSException; import com...

金蝶EAS开发专栏 4876

树莓派34/100 - Pico读取MPU6050加速度和陀螺仪传感器数据

树莓派Pico连接MPU-6050模块(三轴陀螺仪+三轴加速度),读取运动姿态数据。

申龙斌的程序人生 5088

网易 广州 梦幻西游端游 客户端社招笔试题 2024

4道算法题,时间2小时,牛客网笔试注:采用OJ模式,需要自己处理输入、输出。

z2014z的博客 1813

Spring MVC 4 使用常规的fileupload上传文件(带源码)

【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看。源码下载地址在文章末尾。】【翻译 by 明明如月 QQ 605283073】上一篇: Spring MVC 4 文件上传下载 Hibernate+MySQL例子 (带源码)原文地址:http://websystique.com/springmvc/spring-mvc-4-file-upload-example-usin...

悟鸣的技术博客 1万+

树莓派小车:智能捡球小车——Q宝

在遇到第一个直角右转口后,进入阶段二,阶段二是智能小车减速,因为速度过快可能导致车头下方的检测出现小毛病,小车进入第一个左拐路口,增加左转时间,然后直行,到横线处,小车停止,进入阶段三,小车先识别前方的球类,然后倒车到拐口处,原地右转,之后的识别也是类似的操作,随后有一个简单的避障功能,进行球类识别测试时,在本地测试效果良好,但是投入实际应用中时,受到光线等因素的影响,识别球类的能力大大下降。小车摄像头精度不够,视角较小,在识别人脸时,需要不断移动人脸照片,让摄像头能够抓取人脸。在第一阶段的循迹过程中,

dfbsszxzv的博客 1932

FileUpload 上传文件 详细参数设置 前后台代码

html代码: &lt;div id="fileQueue"&gt;&lt;/div&gt; &lt;--进度展示--&gt; &lt;div id="uploadify" class="attch-img-btn"&gt; &lt;/div&gt;&lt;--上传按钮--&gt;

qq_39493425的博客 9382

几何修复_ANSYS流体分析:几何前处理

建模及几何处理工具非常多,选择起来让人眼花缭乱。对于仿真而言,高效的对几何进行清理及生成符合仿真要求的几何至关重要。ANSYS SpaceClaim Direct Modeler是基于直接建模思想的新一代3D高效率建模和几何编辑修补软件。SCDM提供了当今最快速、最富有创意的直接建模解决方案。由于它的直接建模能力即使对于导入的其它3D模型(如catia、proe、solid works创建的几何)...

weixin_35778830的博客 2417

cocos creator接入微信登陆sdk ios篇

cocos creator接入微信登陆sdk ios篇 背景已经在Android篇里面交代过了,有兴趣的朋友可以再看看Android篇 步骤 去微信开放平台下载ios平台所需要的sdk 在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id 在“info”标签栏的“LSApplicationQueriesSchemes“添加weixin 将SDK文件中...

凤小鹿的博客 6362

FileUpload组件(文件上传下载)

文件上传web设置 实现web开发中的文件上传功能,操作步骤:         1.在web页面中添加上传输入项。         2.在servlet中读取上传文件的数据,并保存到本地硬盘中。 标签用于在web页面中添加文件上传输入项,设置文件上传输入项时须注意: 1.必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据。

QQ1012421396的博客 4296

Spring AI从入门到精通:构建智能Spring应用的全面指南

随着人工智能技术的快速发展,将大语言模型(LLM)与企业应用集成已成为趋势。Spring AI作为Spring官方推出的AI集成框架,为开发者提供了便捷、标准化的方式来构建智能应用。本文将从基础概念到高级应用,全面介绍Spring AI的核心功能与实践技巧。Spring AI 是 VMware 于 2023 年推出的开源框架,旨在简化大语言模型(LLM)与 Spring 应用的集成。它提供了统一的 API 抽象,支持多种 LLM 供应商,包括 OpenAI、Azure OpenAI、Hugging Face

qq_36929638的博客 1069

使用common-fileUpload实现文件上传

FileUpload上传一个文件的过程中可以分为三个部分:首先,客户端与服务器端建立连接,把要上传的文件生成request数据流。其次服务器端接收request流,将流缓存到内存或磁盘中。当文件过大时,文件将被缓存到内存,否则将被缓存到磁盘的临时文件。最后由服务器端的内存或是临时文件中把文件输出到指定的目录,这个目录才是指定的文件上传目录。

技术交流 5412

Python爬虫实战:利用Selenium与Playwright抓取美团外卖数据

在当今大数据时代,网络数据采集已成为商业分析和市场研究的重要手段。本文以美团外卖平台为例,详细介绍如何使用Python最新爬虫技术(Selenium、Playwright)进行数据采集,并探讨相关技术原理、反爬应对策略及数据存储方案。通过5000+字的详细讲解和完整代码示例,帮助读者掌握现代网络爬虫开发的核心技能。本文详细介绍了使用Python最新爬虫技术采集美团外卖数据的完整流程,涵盖了从环境配置、页面分析到数据存储的全链路解决方案。

2201_76125261的博客 2550

Vue - 萤石云监控 ezuikit 视频实例销毁方案,解决使用stop方法无法销毁EZUIKit实例或销毁后依然占用内存并且监控画面依然有声音问题(解决页面多个监控摄像头画面同时播放,翻页或关闭页

vue2,vue3,萤石,监控摄像头,萤石云销毁视频实例,退出页面销毁,stop销毁原视频流,占用内存怎么办,销毁后视频依旧在后台播放有声音,销毁视频播放器,页面上有多个视频画面怎么销毁某一个,stop方法不生效怎么办,浏览器非常卡,dom销毁,ezuikit-js萤石云播放器Vue中使用beforeDestory销毁播放器实例,调用萤石云ezuikit-js的视频对象销毁,vue使用萤石云监控视频录像回放,不销毁实例会出现离开页面后依旧有监控声音并且占内存问题,不好使,页面崩了,崩溃,视频监控太多,没有用

🏆 前端领域优质创作者 1万+

文件上传-FileUpload

文件上传即从本地磁盘文件中通过IO写入服务器的操作。一般存在一下几种方法完成,例如:Servlet3.0,JSPSmartUpload,FileUpload,框架。本篇章主要介绍FileUpload。 文件上传的三要素 表单的提交方式必须为POST; 表单的文件上传表单项中必须有name属性,例如:<input type="file" name="upload"/> 表单的enctype属性的值必须是multipart/form-data enctype为表单提交时所采取的传输编码方式,默

Do_GH的博客 2085

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java web文件上传——FileUpload

文件上传分析 1.普通表单提交默认enctype="application/x-www-form-urlencoded";但是当表单中存在文件类型时,需要设置enctype="multipart/form-data",它不对字符进行编码,用于发送二进制的文件(即所有文件类型,如视频、图片、音乐、文档都可以用此类型entype);还有一种enctype="text/plain"用于发送纯文本内容。...

零怀念的博客 10万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

commons-fileupload实现文件上传

版权声明:本文为 小...

别抢我蓝buff 1934

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

使用fileupload实现文件上传

使用fileupload实现文件上传主要步骤 1、在http://commons.apache.org/下载commons-fileupload.jar和commons-io.jar包,将其导入到referenced libraries; 2、在写jsp界面的form表单设置ENCTYPE="multipart/form-data",method方法为“post”; 3、创建处理文件上传的serv

点 803

commons-fileupload文件上传、下载

 今天复习了下commons-fileupload文件上传,写了个demo。需要的jar包为:commons-fileupload-1.2.1.jar、commons-io-1.4.jar。都可去apache下的commons下下载。1、index.jsp

humao84229247的专栏 1364

fileupload文件上传、下载教程

fileupload概述 fileupload是由apache的commons组件提供的上传组件。它最主要的工作就是帮我们解析request.getInputStream()。 使用fileupload只需要2个jar包 commons-fileupload....

2755

用FileUpload实现多个文件上传

文件上传原理 一、本地计算机实现把本地的资源文件一点一点的读出到内存并一点一点的从输出流上传文件,这一部分是通过浏览器实现的。 二、服务器接受上传的文件,通过内存一点一点读取到服务器硬盘。 FileUpload实现文件上传的步骤: 1. 准备相应的依赖包: 1)commons-fileupload-1.3.2 <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <depende

兀行者的博客 1312

FileUpload文件上传源码解析

FileUpload是apache Commons 用于文件上传的组件,实际上就是用来解析http请求,大家都知道,上传文件的时候,http的request请求的 content-type 是multipart/form-data,我们就可以用FileUpload 来解析http请求,struts,springMVC 等很多MVC框架都是基于FileUpload 来实现文件上传功能。

Charles-代码人生 2513

fileupload文件上传

选择文件: pom.xml中引入jar包 commons-fileupload commons-fileupload 1.3.1 controller @ResponseBody @RequestMapping(value="upload",method=RequestMethod.POST) public String uploadExcel(Ht

xu0626的博客 260

fileupload文件上传用法概述

目录     1、文件上传表单 和 普通文本表单 的区别     2、文件上传对页面的要求     3、文件上传对Servlet的要求     4、fileupload概述     5、fileupload简单应用     6、fileupload上传示例 ================================================================ 文件上传概述...

weixin_42472048的博客 3111
上一篇: 关于js刷新父窗口的
下一篇: Jsp页面处理不在项目目录下的文件。
admin6090
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值