首页 Jsp页面实现文件上传下载

Jsp页面实现文件上传下载

举报
开通vip

Jsp页面实现文件上传下载Jsp页面实现文件上传下载 第 1 页 jsp页面实现文件上传 代码开发的过程见 用TOMCAT作简单的jsp web开发 名称:jsp页面上传类 作者:SinNeR Mail:vogoals[at]hotmail.com 特点: , 可以多文件上传; , 返回上传后的文件名; , form表单中的其他参数也可以得到。 先贴上传类,JspFileUpload package com.vogoal.util; import java.io.BufferedOutputStream; import ...

Jsp页面实现文件上传下载
Jsp页面实现文件上传下载 第 1 页 jsp页面实现文件上传 代码开发的过程见 用TOMCAT作简单的jsp web开发 名称:jsp页面上传类 作者:SinNeR Mail:vogoals[at]hotmail.com 特点: , 可以多文件上传; , 返回上传后的文件名; , form表单中的其他参数也可以得到。 先贴上传类,JspFileUpload package com.vogoal.util; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Hashtable; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; /* * vogoalAPI 1.0 * Auther SinNeR@blueidea.com * by vogoal.com * mail: vogoals@hotmail.com */ /** * JSP上传文件类 * * @author SinNeR * @version 1.0 */ public class JspFileUpload { /** request对象 */ private HttpServletRequest request = null; /** 上传文件的路径 */ private String uploadPath = null; /** 每次读取得字节的大小 */ private static int BUFSIZE = 1024 * 8; /** 存储参数的Hashtable */ private Hashtable paramHt = new Hasptable(); /** 存储上传的文件的文件名的ArrayList */ private ArrayList updFileArr = new ArrayList(); /** * 设定request对象。 * * @param request * HttpServletRequest request对象 */ public void setRequest(HttpServletRequest request) { this.request = request; } /** * 设定文件上传路径。 * * @param path * 用户指定的文件的上传路径。 */ public void setUploadPath(String path) { this.uploadPath = path; } /** * 文件上传处理主程序。�������B * * @return int 操作结果 0 文件操作成功;1 request对象不存在。 2 没有设定文件保存路径或者文件保存路径不 正确;3 * 没有设定正确的enctype;4 文件操作异常。 */ public int process() { int status = 0; // 文件上传前,对request对象,上传路径以及enctype进行check。 status = preCheck(); // 出错的时候返回错误代码。 if (status != 0) return status; try { // ��参数或者文件名�u�� String name = null; // 参数的value String value = null; // 读取的流是否为文件的 标志 禁止坐卧标志下载饮用水保护区标志下载桥隧标志图下载上坡路安全标志下载地理标志专用标志下载 位 boolean fileFlag = false; // 要存储的文件。 File tmpFile = null; // 上传的文件的名字 String fName = null; FileOutputStream baos = null; BufferedOutputStream bos = null; // ��存储参数的Hashtable paramHt = new Hashtable(); updFileArr = new ArrayList(); int rtnPos = 0; byte[] buffs = new byte[BUFSIZE * 8]; // �取得ContentType String contentType = request.getContentType(); int index = contentType.indexOf("boundary="); String boundary = "--" + contentType.substring(index + 9); String endBoundary = boundary + "--"; // �从request对象中取得流。 ServletInputStream sis = request.getInputStream(); // 读取1行 while ((rtnPos = sis.readLine(buffs, 0, buffs.length)) != -1) { String strBuff = new String(buffs, 0, rtnPos); // 读取1行数据�n�� if (strBuff.startsWith(boundary)) { if (name != null && name.trim().length() > 0) { if (fileFlag) { bos.flush(); baos.close(); bos.close(); baos = null; bos = null; updFileArr.add(fName); } else { Object obj = paramHt.get(name); ArrayList al = new ArrayList(); if (obj != null) { al = (ArrayList) obj; } al.add(value); System.out.println(value); paramHt.put(name, al); } } name = new String(); value = new String(); fileFlag = false; fName = new String(); rtnPos = sis.readLine(buffs, 0, buffs.length); if (rtnPos != -1) { strBuff = new String(buffs, 0, rtnPos); if (strBuff.toLowerCase().startsWith( "content-disposition: form-data; ")) { int nIndex = strBuff.toLowerCase().indexOf( "name=\""); int nLastIndex = strBuff.toLowerCase().indexOf( "\"", nIndex + 6); name = strBuff.substring(nIndex + 6, nLastIndex); } int fIndex = strBuff.toLowerCase().indexOf( "filename=\""); if (fIndex != -1) { fileFlag = true; int fLastIndex = strBuff.toLowerCase().indexOf( "\"", fIndex + 10); fName = strBuff.substring(fIndex + 10, fLastIndex); fName = getFileName(fName); if (fName == null || fName.trim().length() == 0) { fileFlag = false; sis.readLine(buffs, 0, buffs.length); sis.readLine(buffs, 0, buffs.length); sis.readLine(buffs, 0, buffs.length); continue; }else{ fName = getFileNameByTime(fName); sis.readLine(buffs, 0, buffs.length); sis.readLine(buffs, 0, buffs.length); } } } } else if (strBuff.startsWith(endBoundary)) { if (name != null && name.trim().length() > 0) { if (fileFlag) { bos.flush(); baos.close(); bos.close(); baos = null; bos = null; updFileArr.add(fName); } else { Object obj = paramHt.get(name); ArrayList al = new ArrayList(); if (obj != null) { al = (ArrayList) obj; } al.add(value); paramHt.put(name, al); } } } else { if (fileFlag) { if (baos == null && bos == null) { tmpFile = new File(uploadPath + fName); baos = new FileOutputStream(tmpFile); bos = new BufferedOutputStream(baos); } bos.write(buffs, 0, rtnPos); baos.flush(); } else { System.out.println("test :" + value + "--" + strBuff); value = value + strBuff; } } } } catch (IOException e) { status = 4; } return status; } private int preCheck() { int errCode = 0; if ( request == null ) return 1; if ( uploadPath == null || uploadPath.trim().length() == 0 ) return 2; else{ File tmpF = new File(uploadPath); if (!tmpF.exists()) return 2; } String contentType = request.getContentType(); if ( contentType.indexOf("multipart/form-data") == -1 ) return 3; return errCode; } public String getParameter(String name){ String value = ""; if ( name == null || name.trim().length() == 0 ) return value; value = (paramHt.get(name) == null)?"":(String)((ArrayList)paramHt.get(name)).get(0); return value; } public String[] getParameters(String name){ if ( name == null || name.trim().length() == 0 ) return null; if ( paramHt.get(name) == null ) return null; ArrayList al = (ArrayList)paramHt.get(name); String[] strArr = new String[al.size()]; for ( int i=0;i <% //初始化 JspFileUpload jfu = new JspFileUpload(); //设定request对象 jfu.setRequest(request); //设定上传的文件路径 jfu.setUploadPath("C:\\"); //上传处理 int rtn = jfu.process(); //取得form中其他input控件参数的值 String username = jfu.getParameter("username"); //如果对应同一个参数有多个input控件,返回数组 String[] usernameArr = jfu.getParameters("username"); //取得上传的文件的名字 String[] fileArr = jfu.getUpdFileNames(); //取得上传文件的个数,这个方法有点鸡肋 int fileNumber = jfu.getUpdFileSize(); //下面的是测试输出的代码。 // out.println("parameter:" + username); //out.println("parameter size:" + usernameArr.length); //out.println("fileArr size:" + fileArr.length); // if (fileArr.length > 0) // out.println("fileArr 0:" + fileArr[0]); %> 使用的时候的注意事项: ? 一定要设定request对象。 ,, 一定要设定正确的上传路径。 ,, 执行完了之后才可以得到其他参数,因为执行了之后这些参数才被分析。 1,2两点如果没有做到的话,process方法执行的时候汇报错。 各个用户可用的方法及说明: 设定requet对象。 public void setRequest(HttpServletRequest request) 设定文件上传的路径。 public void setUploadPath(String path) 文件上传处理主程序。 @return int 操作结果 0 文件操作成功;1 request对象不存在。 2 没有设定文件保存路径或者文件保存路径不正确;3 没有设定正确的enctype;4 文件操作异常。 public int process() 根据name取得form表单中其他传递的参数的值(多个的话返回其中一个) public String getParameter(String name) 根据name取得form表单中其他传递的参数的值(返回数组,可有多个) public String[] getParameters(String name) 取得上传成功文件的个数 public int getUpdFileSize() 取得上传的文件名对应的数组。 public String[] getUpdFileNames() 注意process方法地返回值,在不是0的情况下操作失败。 以下提供测试类以及测试页面(见附件): HelloPostFile.html HelloPostFile.jsp 写在jsp中的代码的测试文件。 HelloPostFileWithClass.html HelloPostFileWithClass.jsp 抽出class后的测试文件。 src在 WEB-INF/src/ class在 WEB-INF/classes/ 另: 由于这个文件被我在中文日文系统下编辑过,注释出现乱码,所以大部分都删掉了,见谅。 原码:jspUpload 第 2 页 jsp页面实现文件下载 JSP文件下载类整理完成。可以在JSP页面中实现简单的下载,支持文件打包下载功能。支持将字符串或者流生成文件提供下载的功能。但是也有一些缺点。现把这个类的基本介绍 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 如下。 名称:jsp页面下载类 作者:SinNeR Mail:vogoals[at]hotmail.com 特点及功能介绍: , 支持单文件下载。支持多文件zip压缩下载。多文件zip压缩可在服务器保留或者删除副本。 支持将特定的字符串或者byte数组以指定的文件名提供下载。 , 在下载过程中需要提供response对象。并且选择下载形式。 , 下载处理前先进行check,避免出现错误。 , 下载处理过程中出错时,会报告错误信息。 , 日文系统下文件名是中文时出现乱码问题。 , 处理前需要进行相对繁琐的设定。 现介绍下使用者可见的方法的功能。 设定实现下载必须的response对象。 public void setResponse(HttpServletResponse response) 设定下载方式:0 为普通单文件下载。 1 为多文件压缩成zip包下载。 2 为将指定的字符串等拼接成文件内容提供给用户下载。 public void setDownType(int fileType) 设定下载时显示给用的文件名。 public void setDisFileName(String fileName) 压缩文件下载时,设定压缩文件暂时保存的路径(路径为绝对路径) public void setZipFilePath( String path ) 压缩文件下载时,设定服务器端生成的压缩文件是否删除。True 删除;false 保留。 public void setZipDelFlag(boolean b) 压缩文件下载时,设定要压缩的文件的文件路径(路径为绝对路径) public void setZipFileNames(String[] fileNames) 单文件下载时,设定下载文件的路径(绝对路径) public void setDownFileName(String fileName) 将字符串生成文件内容模拟下载时,设定文件的内容。参数为字符串(可多次调用) public int setFileContent(String fileContent) 将字符串生成文件内容模拟下载时,设定文件的内容。参数为byte数组(可多次调用) 返回值:0 操作正常; 9 出现IO异常。 public int setFileContent(byte[] fileContent) 将字符串生成文件内容模拟下载时,调用此方法结束文件内容设定。 返回值:0 操作正常; 9 出现IO异常。 public int setFileContentEnd() 主处理函数。 返回值: 0 处理正常;1 未设定response对象。 2 未设定文件下载方式。 3 未设定要显示的文件名。 4 未设定要下载的文件路径,或者设定的下载的文件路径不存在。 9 IO异常。 public int process() 现在介绍不同下载模式下的简单 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 : 单文件下载流程: //实例初始化 JspFileDownload jfd = new JspFileDownload(); //设定response对象 jfd.setResponse(response); //设定文件下载模式 0 单文件下载。 jfd.setDownType(0); //设定显示的文件名 xxxx.xxx jfd.setDisFileName(filename); //设定要下载的文件的路径,绝对路径 jfd.setDownFileName(filePath); //主处理函数。注意处理返回值。 int result = jfd.process(); 多文件压缩成ZIP文件下载: //实例初始化 JspFileDownload jfd = new JspFileDownload(); //设定response对象。 jfd.setResponse(response); //设定下载模式 1 多文件压缩成ZIP文件下载。 jfd.setDownType(1); //设定显示的文件名 jfd.setDisFileName(filename); //设定要下载的文件的路径(数组,绝对路径) jfd.setZipFileNames(fileNames); //设定服务器端生成的zip文件是否保留。 true 删除 false 保留,默认为false jfd.setZipDelFlag(true); //设定zip文件暂时保存的路径 (是文件夹) jfd.setZipFilePath(zipfolder); //主处理函数 注意返回值 Int result = jfd.process(); 将字符串生成为文件内容,模拟文件下载: //实例初始化 JspFileDownload jfd = new JspFileDownload(); //设定response对象。 jfd.setResponse(response); //设定下载模式 2 将字符串作为文件内容,实现文件下载。 jfd.setDownType(2); //设定文件显示的名称。 jfd.setDisFileName(request.getParameter("filename")); //主处理函数,下载前check,注意返回值 out.print(jfd.process()); //设定要写入文件的内容,参数可为字符串或者byte数组。可多次调用。 jfd.setFileContent(request.getParameter("name")); //文件内容设定完了,调用函数。 jfd.setFileContentEnd(); 以上就是简单的使用介绍。下面贴出主处理类的代码。由于在日文系统下编辑的文件。注释只能写英 文,英文太差-_-b。多包涵。 package com.vogoal.util; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.servlet.http.HttpServletResponse; /* * vogoalAPI 1.0 * Auther SinNeR@blueidea.com * by vogoal.com * mail: vogoals@hotmail.com */ /** * JSP FILE DOWNLOAD SUPPORT * * @author SinNeR * @version 1.0 */ public class JspFileDownload { /** request object */ private HttpServletResponse response = null; /** file type: -1 un-setting; 0 normal file; 1 zip file ;2 stream*/ private int fileType = -1; /** file name to be displayed */ private String disFileName = null; /** zip file path */ private String zipFilePath = null; /** file to be zipped */ private String[] zipFileNames = null; private boolean zipDelFlag = false; /** file to be downloaded */ private String downFileName = null; /** error code 0 */ private static final int PROCESS_OK = 0; /** error code 1 */ private static final int RESPONSE_IS_NULL = 1; /** error code 2 */ private static final int UNSET_DOWNLOADTYPE = 2; /** error code 3 */ private static final int UNSET_DIS_FILE_NAME = 3; /** error code 4 */ private static final int UNSET_DOWN_FILE_NAME = 4; /** error code 9 */ private static final int IO_EXCEPTION = 9; /** * set response object * @param response response Object */ public void setResponse(HttpServletResponse response){ this.response = response; } /** * set file type 0 normal file; 1 zip file ;2 stream * @param fileType */ public void setDownType(int fileType){ this.fileType = fileType; } /** * set display file name * @param fileName */ public void setDisFileName(String fileName){ this.disFileName = fileName; } /** * set zip file path * @param fileNames */ public void setZipFilePath( String path ){ this.zipFilePath = path; } public void setZipDelFlag(boolean b){ this.zipDelFlag = b; } /** * set zip file names * @param fileNames */ public void setZipFileNames(String[] fileNames){ this.zipFileNames = fileNames; } /** * set download file name * @param fileName */ public void setDownFileName(String fileName){ this.downFileName = fileName; } /** * set file content * @param fileContent */ public int setFileContent(String fileContent){ try{ byte[] buffs = fileContent.getBytes("UTF-8"); response.getOutputStream().write(buffs); }catch(IOException e){ return IO_EXCEPTION; } return PROCESS_OK; } /** * set file content * @param fileContent */ public int setFileContent(byte[] fileContent){ try{ response.getOutputStream().write(fileContent); }catch(IOException e){ return IO_EXCEPTION; } return PROCESS_OK; } /** * set file content end * */ public int setFileContentEnd(){ try{ response.getOutputStream().close(); }catch(IOException e){ return IO_EXCEPTION; } return PROCESS_OK; } /** * main process * @return */ public int process(){ int status = PROCESS_OK; status = preCheck(); if ( status != PROCESS_OK ) return status; String fileName = disFileName; response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition","attachment;filename=\"" + fileName + "\""); int BUFSIZE = 1024 * 8; int rtnPos = 0; byte[] buffs = new byte[ BUFSIZE ]; FileInputStream inStream = null; ZipOutputStream zos = null; InputStream is = null; String filepath = null; try{ if ( fileType == 0 || fileType == 1){ if ( fileType == 0 ){ filepath = downFileName; }else{ filepath = zipFilePath + fileName; String[] fileToZip = zipFileNames; zos=new ZipOutputStream(new FileOutputStream(filepath)); ZipEntry ze=null; byte[] buf=new byte[BUFSIZE]; int readLen=0; for (int i= 0;i0) response.getOutputStream().write(buffs,0,rtnPos); response.getOutputStream().close(); inStream.close(); } if ( zipDelFlag ){ File fToDel = new File(filepath); fToDel.delete(); } }catch(IOException e){ return IO_EXCEPTION; }finally{ try{ if ( inStream != null ){ inStream.close(); inStream = null; } if ( zos != null ){ zos.close(); zos = null; } if ( is != null ){ is.close(); is = null; } }catch (IOException e){ } } return status; } /** * pre check. * @return */ private int preCheck(){ if ( response == null ) return RESPONSE_IS_NULL; if ( disFileName == null || disFileName.trim().length() == 0 ) return UNSET_DIS_FILE_NAME; if ( fileType == -1 ) return UNSET_DOWNLOADTYPE; else if ( fileType == 0 ){ if ( downFileName == null || downFileName.trim().length() == 0 ) return UNSET_DOWN_FILE_NAME; else{ if ( !isFile( downFileName ) ) return UNSET_DOWN_FILE_NAME; } }else if ( fileType == 1 ){ if ( zipFilePath == null || zipFilePath.length() == 0 ) return UNSET_DOWN_FILE_NAME; else{ if ( !isDirect(zipFilePath) ) return UNSET_DOWN_FILE_NAME; } if ( zipFileNames == null || zipFileNames.length == 0 ) return UNSET_DOWN_FILE_NAME; else{ for ( int i=0;i 注意: 可能存在编码方式的问题,如果出现或者有别的bug请联系我,我来debug。 附件为这个类的source以及测试程序。 附件说明: , 单文件下载测试程序 请求页面:downloadSimpleFile.html 下载功能实现页面:downloadSimpleFile.jsp , 多文件压缩成zip文件下载的测试程序 请求页面:downloadZipFile.html 下载功能实现页面:downloadZipFile.jsp ? 字符串生成文件内容模拟文件下载的测试程序。 请求页面:downloadStreamFile.html 下载功能实现页面:downloadStreamFile.jsp ,, Source及class文件。 Source WEB-INF/src/com/vogoal/util/ JspFileDownload.java Class文件WEB-INF/classes/com/vogoal/util/ JspFileDownload.class 原码:jspDownload
本文档为【Jsp页面实现文件上传下载】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_321575
暂无简介~
格式:doc
大小:66KB
软件:Word
页数:30
分类:生活休闲
上传时间:2017-10-16
浏览量:29