利用 fileupload实现文件上传

前几天写了一个个人收藏夹的模块,用到了fileupload组件来实现文件的上传操作,今天整理了一下,与大家共享,以前看了一写例子,虽然能实现多个文件的上传,但数目是固定的,无法实现动态增加,即使实现了表单的增加,但相关的其他信息,例如手动增加的备注等,仍然不能实现。我只好挨个上传,但最后给用户显示的时候却好像多个文件上传似的,呵呵。好了。言归正传,如果已经下载了fileupload的jar包,那么我们就可以开始开始我们的文件上传之路了。

首先是写好jsp页面,需要注意的是:必须有一个类似这样的file选择框:<input name="WJLJ" type="file" value="" size="70"/>

然后我们在form中要这样写:<form method="post" action=”UploadServlet" id="GR_GRBG_GRSC_FORM" name=" FORM"  ENCTYPE="multipart/form-data">,uploadservlet是我们自己写的servlet,用于实现文件的上传,也是我们要说的重点,能不能上传,全看它了。

/**

* 文件名称:UploadServlet.java;

* 包 结 构:com.zzxy.control;

*

* 版权信息:

*/

package com.zzxy.control;

import com.zzxy.common.MIS_Constant;

import com.zzxy.common.PdkUtils;

import com.zzxy.model.gr.GR_Agent_Helper;

import com.zzxy.model.vo.atom.VO_PT_GRSCWJ;

import java.util.*;

import java.io.*;

import java.util.Enumeration;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.*;

import com.zzxy.common.SecretCoder;

/**

* 类名称:FileUploadServlet;

* 类描述:自动执行文件上传,并将自动路由到Controller及相应的Agent组件

*

* 编 写 人:

* 编写日期:2004.09.09

* 修改人:

* 修改日期: 2004/09/11

* 修改原因:如果上传的为空和上传的不是文件时的处理

*          1.如果为空,则不执行写文件操作

*          2.如果上传的文件根本不存在,则抛出"上传文件失败"

* 版    本:

*/

public class UploadServlet

extends HttpServlet {

/**

* 名称:UploadServlet;

* 功能:

* 输入参数:

* 返回参数:无

*/

public UploadServlet() {

}

private static final String CONTENT_TYPE = "text/html; charset=GBK";

public void init(ServletConfig config) throws ServletException

{

super.init(config);

}

/**

* 名称:doPost

* 功能:

* 输入参数:HttpServletRequest request

*           HttpServletResponse response

* 返回参数:无

*/

public void doPost(HttpServletRequest request,

HttpServletResponse response) throws IOException {

response.setContentType(CONTENT_TYPE);

try {

PrintWriter out = response.getWriter();

String strSizeMax = "10485760";

String strSizeThreshold = "4096";

//临时文件路径

String strUploads = this.getServletContext().getRealPath("/misdoc/mydocs");

//声明DiskFileUpload对象

DiskFileUpload diskFileUpload = new DiskFileUpload();

diskFileUpload.setSizeMax(new Long(strSizeMax).longValue());

diskFileUpload.setSizeThreshold(new Integer(strSizeThreshold).intValue());

//diskFileUpload.setRepositoryPath(strTmp);

List fileItems = diskFileUpload.parseRequest(request);

out.write("<form method=/"post/" action=/"");

out.print( PdkUtils.appRoot(request));

out.write("/HTTPController/" id=/"DATAFORM/" name=/"DATAFORM/">  /r/n");

String strSCRID = "";

String strSCJID = "";

String strGJZ = "";

String strMS = "";

String strWJLJ = "";

String strRequestID ="";

String strFlag ="First";

for (int m = 0; m < fileItems.size(); m++) {

FileItem fileItem = (FileItem) fileItems.get(m);

if(fileItem.isFormField())

{

//取到隐藏域

if (fileItem.getFieldName().equals("SCRID")) {

strSCRID = fileItem.getString();

}

if (fileItem.getFieldName().equals("SCJID")) {

strSCJID = fileItem.getString();

}

if (fileItem.getFieldName().equals("GJZ")) {

strGJZ= fileItem.getString();

}

if (fileItem.getFieldName().equals("MS")) {

strMS = fileItem.getString();

}

if (fileItem.getFieldName().equals("RequestID")) {

strRequestID = fileItem.getString();

}

if (fileItem.getFieldName().equals("Flag")) {

strFlag = fileItem.getString();

}

}

//忽略其他不是文件域的所有表单信息

if (!fileItem.isFormField()) {

strWJLJ = fileItem.getName().trim();

File fileName = new File(strWJLJ);

String filename = fileName.getName();

String strExtend = filename

.substring(filename.lastIndexOf(".")

, filename.length());

long size = fileItem.getSize();

if((strWJLJ==null||strWJLJ.equals("")) && size==0)

continue;

else

{

/向数据库中增加记录

GR_Agent_Helper gr_Agent_Helper = new GR_Agent_Helper();

VO_PT_GRSCWJ vo_PT_GRSCWJ = new VO_PT_GRSCWJ();

vo_PT_GRSCWJ.setWJID(gr_Agent_Helper.createPK(MIS_Constant.KEY_GRBG_GRSC_SCJID));

vo_PT_GRSCWJ.setSCJID(Long.parseLong(strSCJID));

filename=filename.replaceAll("'","’");

vo_PT_GRSCWJ.setWJMC(filename);

if(strGJZ.equals(""))

strGJZ = filename;

String strTime = getNowTime();

vo_PT_GRSCWJ.setGJZ(strGJZ);

vo_PT_GRSCWJ.setMS(strMS);

vo_PT_GRSCWJ.setWJDX(size);

vo_PT_GRSCWJ.setSCSJ(Long.parseLong(strTime));

gr_Agent_Helper.add(vo_PT_GRSCWJ);

///上传文件

strUploads = strUploads +"//"+ strSCRID;

if(!new File(strUploads).isDirectory())

new File(strUploads).mkdirs();

String strTmp = strUploads +"//";

diskFileUpload.setRepositoryPath(strTmp);

String filenewName = String.valueOf(vo_PT_GRSCWJ.getWJID())+"_"+strTime + strExtend;

strTmp = strTmp + filenewName;

String strWJID = String.valueOf(vo_PT_GRSCWJ.getWJID());

/

System.out.println("准备上传文件:"+strTmp);

//

fileItem.write(new File(strTmp));

//向后传递上传文件的信息

out.print("<input type='hidden' name=RequestID" + " value='" + strRequestID + "'>");

out.print("<input type='hidden' name=WJLJ" +" value='" + strWJLJ + "'>");

out.print("<input type='hidden' name=WJID" + " value='" + strWJID + "'>");

out.print("<input type='hidden' name=Flag" + " value='" + strFlag + "'>");

}

}

}

out.write("</form>/r/n");

out.write("<script language=/"javascript/">/r/n  DATAFORM.target=/"_self/";/r/n  DATAFORM.submit();/r/n");

out.write("</script>");

} catch (IOException ioe) {

forwardError("上传文件在存盘时失败,请检查指定的路径和读写权限!",request,response);

} catch (FileUploadException ie) {

forwardError("上传文件在存盘时失败,请检查您上传的文件大小!",request,response);

} catch (Exception e) {

forwardError("上传文件失败!",request,response);

System.out.println("UploadServlet: " + e.toString());

}

}

/**

* 名称:显示错误页面方法

* 功能:将错误信息显示在错误页面中

* 输入参数:String:errorMessage:错误信息

*          HttpServletRequest:request:Http请求对象

*          HttpServletResponse:response:Http响应对象

* 返回参数:

*/

protected void forwardError(String errorMessage,

HttpServletRequest request,

HttpServletResponse response) {

try {

//设置错误信息

request.setAttribute("ErrorMessage", errorMessage);

//将请求传递给显示错误信息的jsp显示

getServletContext()

.getRequestDispatcher("/error.jsp")

.forward(request, response);

}

catch (Exception Exp) {

}

}

/**

* 编 写 人

* 名   称:getNowTime

* 功   能:获取本机时间

* 输入参数:HttpServletRequest request

* 返回参数:void

*/

public String getNowTime() throws Exception {

try{

Calendar rightNow = Calendar.getInstance();

String month = String.valueOf(rightNow.get(Calendar.MONTH)+1);

String day =String.valueOf(rightNow.get(Calendar.DAY_OF_MONTH));

String hour =String.valueOf(rightNow.get(Calendar.HOUR_OF_DAY));

String minute =String.valueOf(rightNow.get(Calendar.MINUTE));

String secend =String.valueOf(rightNow.get(Calendar.SECOND));

if((rightNow.get(Calendar.MONTH)+1)<10)

month = "0"+month;

if(rightNow.get(Calendar.DAY_OF_MONTH)<10)

day = "0"+day;

if(rightNow.get(Calendar.HOUR_OF_DAY)<10)

hour = "0"+hour;

if(rightNow.get(Calendar.MINUTE)<10)

minute = "0"+minute;

if(rightNow.get(Calendar.SECOND)<10)

secend = "0"+secend;

String time = String.valueOf(rightNow.get(Calendar.YEAR))+month+day+hour+minute+secend;

return time;

} catch (Exception ex) {

throw ex;

}

}

}

我这里写完之后自动提交了一个action,实现了servlet的重定向,并存储了文件路径等信息,试试效果还可以,另外说明一下,vo是我们生成的一个用于存储文件信息的数据库表的vo,运行环境是jdev,采用框架是我们自己设计的框架结构,是不能直接运行的哦。

2004年11月12日相关推荐

  1. 医院管理制度【第一辑】2010年11月12日

    我最近将陆续整理医院管理制度方面的资源汇总,这里先做一个实验,整理一下今天2010年11月12日的关于医院关老子制度的帖子. 中国医院管理制度全集(上) 中国医院管理制度全集(下) 医嘱书写.执行制度 ...

  2. 英雄联盟更新后服务器还在维护吗,英雄联盟今天维护到什么时候结束 11月12日停机更新维护公告...

    英雄联盟今天维护到什么时候结束?11月12日更新维护了哪些内容?英雄联盟基本上每周都会进行维护更新,而且多数是采用停服更新的方式,维护期间将无法进入游戏,加上这次更新是2021赛季季前赛更新,推出大量 ...

  3. 分享Silverlight/WPF/Windows Phone一周学习导读(11月6日-11月12日)

    分享Silverlight/WPF/Windows Phone一周学习导读(11月6日-11月12日) 本周Silverlight学习资源更新 [Silverlight]关于对Canvas.ZInde ...

  4. Windows8/Silverlight/WPF/WP7周学习导读(11月12日-11月18日)

    Windows8/Silverlight/WPF/WP7/HTML5周学习导读(11月12日-11月18日) 本周Windows 8开发学习资源更新 快速构建Windows 8风格应用25-数据绑定 ...

  5. qt emit是什么意思_2020年11月12日 无赞赏QT吗哪 :一同站在福音之上的祷告同工...

    QT是Quiet Time的简称,是敬虔时刻的意思:QT也就是灵修. QT(灵修)是每位基督徒每天生命中的需要,就如同人肉体每天需要食物一样,所以QT是基督徒每天成长的必须:并且最有效的QT就是早上( ...

  6. 任天堂推出《塞尔达传说》GAMEampWATCH游戏机,预计要在 2021 年 11 月 12 日推出塞尔达版本的 GAMEampWATCH

    模玩资讯:任天堂推出<塞尔达传说>GAME&ampWATCH游戏机 任天堂将自家起底基业商品GAME&ampWATCH结合招牌游戏有奇效!继去年此时推出<超级玛利欧兄 ...

  7. 弹射王服务器正在维护中,【 合服公告】《弹射王》2020年11月12日

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 各位亲爱的蛋挞, <弹射王>IOS版将于2020年11月12日早上7:00-09:30进行合服维护. 合服: 333&335 341& ...

  8. 【历史上的今天】11 月 12 日:USB 3.0 发布;图灵机论文被发表;TinyOS 创作者诞生

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 11 月 12 日,在 112 年前的今天,我国著名数学家华罗庚先生诞生,他也是中科院院士,清华大学 ...

  9. 常用JS正则大全(2019年11月12日更新)

    来源: any86.github.io/any-rule/ 11月12日更新"网址" 匹配更准确,支持匹配vue的路由参数 9月16日更新"银行卡号" 根据微信 ...

最新文章

  1. postgresql scws zhparser安装
  2. 准确率至上已是过去式,这些趋势在2020年的AI领域更受关注
  3. Java位运算在程序设计中的使用:位掩码(BitMask)
  4. ABAP和Java里关于DEFAULT(默认)机制的一些语言特性
  5. 树莓派AI视觉云台——1.树莓派Pi3简介
  6. 账号管理工具_全新微信个人号管理工具能选择吗?为何这么说?
  7. linux用rsync实现同步,Linux下使用rsync实现主备机代码同步
  8. Python ' ~ ' (取反) 操作符解释
  9. 将CSV文件存为HTML文件形式
  10. 案例4-2 树种统计 (25 分)(map映射)
  11. 《善用佳软:高效能人士的软件应用之道》一2.5 PDF:跨平台文档解决方案
  12. 数据科学和人工智能技术笔记 二十、数据可视化
  13. 【图解版】HashMap原理初探
  14. 多节点Linux部署
  15. 如何将.md文件转换为pdf
  16. 【MongoDB】MacOS安装MongoDB完整收录
  17. 【红队】ATTCK - 浏览器扩展实现持久化
  18. 正点原子LCD转接板与最小系统板的连接
  19. 现成的MP4地址分享
  20. 【vue】修改props传进来的值

热门文章

  1. 2021年全球超导体收入大约735.7百万美元,预计2028年达到823.7百万美元
  2. 经典:全国老婆一览表
  3. 相似图片搜索的三种算法
  4. markdown 摘记
  5. Win10系统更新提示错误0xc1900403的解决方法
  6. 《Hexo: 从零开始编写自己的主题》4. fancybox优化图片展示效果、代码高亮以及数学公式
  7. 谷歌云wordpress搭建博客网站
  8. IE可以上网谷歌和QQ无法上网
  9. 【pytorch】tensor和Tenso区别
  10. 3.4.10nbsp;孙正义