自己写的一个JSP上传文件和下载文件的JavaBean

转载 2007年09月24日 16:03:00

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-2);
        fos.close();
    }

    /**
     * 获取上传的文件buffer,结尾处将多2个字节
     * @param name String 文件上传参数的名字
     * @param is InputStream 服务器对话的输入流
     * @return byte[] 返回获取的文件的buffer,结尾处将多2个字节
     * @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()) {
                readStreamLineAsString(bis); // skip a line
                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;
                while(!isByteArraystartWith(lineData, lineSeparatorByte)) {
                    lineData = readStreamLine(bis);
                    if(lineData == null)
                        return null;
                }
            }
        }
        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) {
            bos.write(b);
            if(b == '/n') break;
            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" class="testupload.RunningUpLoader" />

<%

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");
    }

 

 

Javabean+JSP 实现文件的上传 显示 下载

实验六 文件操作 一、实验目的 1.继续掌握JavaBean的概念。 2.掌握JSP的输入和输出流。 3.掌握在页面中读写文件中的数据。 4.掌握如何进行文件操作。 二、实验要求 1...
  • Coder__CS
  • Coder__CS
  • 2017年05月23日 22:51
  • 536

使用jsp+javaBean写一个网页计算器

在学习jsp时写的练手的代码。 运行效果: calculator.jsp代码: My JSP 'calculator.jsp' starting page ...
  • Lionel_D
  • Lionel_D
  • 2015年10月28日 17:07
  • 1409

Jsp 使用 fileupload 文件上传和下载

前言Jsp文件上传的目前主要有两个常用的: 1、SmartUpload 2、Apache Commons fileupload我在期末的 Jsp大作业 使用到文件上传模块,使用了第二个 Apach...
  • plain_maple
  • plain_maple
  • 2016年12月01日 22:09
  • 4144

Jsp 实现文件上传下载

JavaWeb学习总结——文件上传和下载 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天上课老师讲了文件上传和下载功能的实现,为了便于以后使用做个总结。对于文件上传,浏览器在上传...
  • sxc1414749109
  • sxc1414749109
  • 2017年05月08日 22:03
  • 552

一个简单的JSP+JavaBean web计算器

什么是JavaBean实际上,JavaBean就是一个Java类,只不过是一些遵循特定接口格式的Java类。为了直观地说明问题,我们直接看一个例子:Add.javapublic clas Add { ...
  • a153375250
  • a153375250
  • 2016年03月14日 12:52
  • 1897

用JSP+servlet实现文件的上传与下载

现在看来使用JSP+Servlet实现文件的上传与下载已经是有些落后了,现在能很方便实现文件的上传与下载插件和工具有很多,常用的有SmartUpload插件、Struts2框架以及富文本编辑器等等。但...
  • weixian52034
  • weixian52034
  • 2016年08月06日 13:51
  • 6386

jsp+servlet文件上传以及request提交数据利用反射封装到实力类中

1.带有文件上传的form表单不能使用getParameter()及其相关方法获取参数之前用过使用反射将数据填充到实体类中使用反射将数据映射到实体类中,但是此种方法不支持上传文件, 但是后来发现这种...
  • u010018421
  • u010018421
  • 2016年10月16日 17:45
  • 407

servlet+jsp实现的文件上传与下载

java文件上传与下载      通过微表单元苏设置Method = "post"      enctype = "multipart/form-data"属性,让表单提交的数据以二进制编码的方式...
  • wojiaohuangyu
  • wojiaohuangyu
  • 2016年03月21日 14:51
  • 7328

【转载】使用jsp实现文件上传到服务器或者从服务器上下载文件到本地计算机完整说明版

很多同学在使用jsp实现文件上传到服务器或者从服务器上下载文件到本地计算机这方面不是很了解,今天在这里我会帮助大家慢慢的实现这一功能。 准备工作: 1.       到网上下载两个包 第一个叫做com...
  • u011827739
  • u011827739
  • 2014年07月23日 02:59
  • 5192

JSP 实用程序之简易文件上传组件

文件上传,包括但不限于图片上传,是 Web 开发中司空见惯的场景,相信各位或多或少都曾写过这方面相关的代码。Java 界若说文件上传,则言必称 Apache Commons FileUpload,论必...
  • zhangxin09
  • zhangxin09
  • 2016年05月31日 10:37
  • 5364
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自己写的一个JSP上传文件和下载文件的JavaBean
举报原因:
原因补充:

(最多只允许输入30个字)