JSP上传文件和下载文件的JavaBean
2007-09-01 23:53
639 查看
这个周末终于可以好好锻炼一下我的IBM ThinkPad T43了。今天看了一些关于JSP,Servlet方面的资料,写了简单的两个JavaBean。一个是UpLoad,一个是DownLoad。写得很简单,没有使用其它任何组件,自己做的。大家可以来看看。 1.RunningUpLoader上传Bean 首先是RunningUpLoader.java,代码有些多,因为我是自己来解析输入流的。 package testupload; import java.io.*; import javax.servlet.http.HttpServletRequest; public class RunningUpLoader { public RunningUpLoader() { } /** * 上传文件 * @param request HttpServletRequest Servlet的请求对象 * @param name String 要上传的文件在表单中的参数名 * @param fileName String 保存在服务器上的文件名 * @throws IOException */ public void doUpload(HttpServletRequest request, String name,String fileName) throws IOException { InputStream in = request.getInputStream(); byte[] buffer = getFileContent(name,in); FileOutputStream fos = new FileOutputStream(fileName); fos.write(buffer,0,buffer.length-1); fos.close(); } /** * 获取上传的文件buffer,结尾处将多一个换行符 * @param name String 文件上传参数的名字 * @param is InputStream 服务器对话的输入流 * @return byte[] 返回获取的文件的buffer,结尾处多一个换行符 * @throws IOException */ private byte[] getFileContent(String name, InputStream is) throws IOException{ int index; boolean isEnd = false; byte[] lineSeparatorByte; byte[] lineData; String content_disposition; ByteArrayOutputStream bos = new ByteArrayOutputStream(); BufferedInputStream bis = new BufferedInputStream(is); lineSeparatorByte = readStreamLine(bis); while(!isEnd) { lineData = readStreamLine(bis); if(lineData == null) { break; } content_disposition = new String(lineData,'ASCII'); index = content_disposition.indexOf('name=/'' + name + '/''); if (index >= 0 && index < content_disposition.length()) { System.out.println(readStreamLineAsString(bis)); // skip a line System.out.println(readStreamLineAsString(bis)); // skip a line while ((lineData = readStreamLine(bis)) != null) { System.out.println(new String(lineData)); if (isByteArraystartWith(lineData, lineSeparatorByte)) { // end isEnd = true; break; } else { bos.write(lineData); } } }else { lineData = readStreamLine(bis); if(lineData == null) return null; System.out.println(new String(lineData,'ASCII')); while(!isByteArraystartWith(lineData, lineSeparatorByte)) { lineData = readStreamLine(bis); if(lineData == null) return null; System.out.println(new String(lineData,'ASCII')); } } } return bos.toByteArray(); } private byte[] readStreamLine(BufferedInputStream in) throws IOException{ ByteArrayOutputStream bos = new ByteArrayOutputStream(); int b = in.read(); if(b== -1) return null; while(b != -1 && b != '/n') { bos.write(b); b = in.read(); } return bos.toByteArray(); } private String readStreamLineAsString(BufferedInputStream in) throws IOException { return new String(readStreamLine(in),'ASCII'); } private boolean isByteArraystartWith(byte[] arr,byte[] pat) { int i; if(arr == null || pat == null) return false; if(arr.length < pat.length) return false; for(i=0;i<pat.length;i++) { if(arr[i] != pat[i]) return false; } return true; } } 上传文件文件的时候,需要在之前的html中增加一个form表单,里面需要有个<input type='file' name='fileUpload' >的输入按钮。这样,浏览器才会将要上传的文件递交给服务器。 其中name='fileUpload'的名字,就是RunnningUpLoader.doUpload函数中的name参数。 使用的时候直接用bean就OK了。比如upload.jsp如下: <jsp:useBean id='upBean' scope='page' /> <% upBean.doUpload(request,'fileupload','runningUpLoad.txt'); %> 2. RunningDownLoader下载Bean package testupload; import java.io.*; import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; public class RunningDownLoader { public RunningDownLoader() { } public void doDownload(HttpServletResponse response, String filePath,String fileName) throws IOException { response.reset();//可以加也可以不加 response.setContentType('application/x-download');//设置为下载application/x-download System.out.println(this.getClass().getClassLoader().getResource('/').getPath()); String filenamedownload = filePath; String filenamedisplay = fileName;//系统解决方案.txt filenamedisplay = URLEncoder.encode(filenamedisplay,'UTF-8'); response.addHeader('Content-Disposition','attachment;filename=' + filenamedisplay); OutputStream output = null; FileInputStream fis = null; try { output = response.getOutputStream(); fis = new FileInputStream(filenamedownload); byte[] b = new byte[1024]; int i = 0; while((i = fis.read(b)) > 0) { output.write(b, 0, i); } output.flush(); } catch(Exception e) { System.out.println('Error!'); e.printStackTrace(); } finally { if(fis != null) { fis.close(); fis = null; } if(output != null) { output.close(); output = null; } } } } 下载文件,最好是做到Servlet上。直接在Servlet的doGet下面增加如下代码即可 //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RunningDownLoader downloader= new RunningDownLoader(); downloader.doDownload(response,'E://MyProjects//testupload.rar','upload.bin'); } |
相关文章推荐
- 一个JSP上传文件和下载文件的JavaBean
- 自己写的一个JSP上传文件和下载文件的JavaBean 自己写的一个JSP上传文件和下载文件的JavaBean
- 自己写的一个JSP上传文件和下载文件的JavaBean
- 自己写的一个JSP上传文件和下载文件的JavaBean
- Javabean+JSP 实现文件的上传 显示 下载
- 自己写的一个JSP上传文件和下载文件的JavaBean
- 自己写的一个JSP上传文件和下载文件的JavaBean
- Java / JSP 文件上传与下载
- Java+jsp+Servlet实现文件上传和下载
- java+jsp代码实现从FTP服务器上传下载文件
- Web开发(jsp+javaBean+servlet )之文件上传
- SERVLET与JSP_文件上传下载(4)-java
- JSP文件上传下载组件(2)
- jspsmart实现文件的上传与下载
- java 简单的文件上传下载服务器模型(NIO 版本)
- 由response.setContentType()方法开始谈JSP/Servelt上传下载文件
- java做的比较完善的FTP连接上传下载文件
- java文件的上传与下载原理(使用Servlet)
- JAVA连接FTP服务器,并上传/下载文件代码
- JavaWeb上传下载使用jspsmartupload.jar