jsp实现文件上传下载的程序示例

一、文件上传
上传文件是Web开发中经常要用到的功能:例如在基于B/S的人事信息管理系统中上传照片,在新闻发布系统中上传图片等等。。。。。要实现文件上传功能,就需要综合利用java中的文件输入和输出相关的类。
在TCP/IP中,最早出现的文件上传机制是FTP。它是将文件由客服端发送到服务器的标准机制,能够考虑到跨平台的文本和二进制格式文件。但是在jsp编程中不能使用FTP方法来上传文件,这是由jsp 运行机制所决定的。
下面是上传文件的jsp页面:

代码如下:

<form action=”file?file=upload” method=”post” enctype=”multipart/form-data”>

    请选择你要上传的文件:<input type=”file” name=”upload” siez=”16″><br>

    <input type=”submit” value=”提交”>

  </form>

对于文件上传表单处理其中method必须为post,也要增加类型enctype=”multipart/form-data”。这样就可以把文件中的数据作为流式数据上传。当然无论是什么文件格式,均可以。。。
下面是servlet 处理程序:

代码如下:

//接收上传文件内容中临时文件的文件名

        String tempFileName = new String(“tempFileName”);

        //tempfile 对象指向临时文件

        File tempFile = new File(“D:/”+tempFileName);

        //outputfile 文件输出流指向这个临时文件

        FileOutputStream outputStream = new FileOutputStream(tempFile);

        //得到客服端提交的所有数据

        InputStream fileSourcel = request.getInputStream();

        //将得到的客服端数据写入临时文件

        byte b[] = new byte[1000];

        int n ;

        while ((n=fileSourcel.read(b))!=-1){

            outputStream.write(b,0,n);

        }

        //关闭输出流和输入流

        outputStream.close();

        fileSourcel.close();

        //randomFile对象指向临时文件

        RandomAccessFile randomFile = new RandomAccessFile(tempFile,”r”);

        //读取临时文件的第一行数据

        randomFile.readLine();

        //读取临时文件的第二行数据,这行数据中包含了文件的路径和文件名

        String filePath = randomFile.readLine();

        //得到文件名

        int position = filePath.lastIndexOf(‘\’);

        CodeToString codeToString = new CodeToString();

        String filename = codeToString.codeString(filePath.substring(position,filePath.length()-1));

        //重新定位读取文件指针到文件头

        randomFile.seek(0);

        //得到第四行回车符的位置,这是上传文件数据的开始位置

        long  forthEnterPosition = 0;

        int forth = 1;

        while((n=randomFile.readByte())!=-1&&(forth<=4)){

            if(n==’n’){

                forthEnterPosition = randomFile.getFilePointer();

                forth++;

            }

        }

        //生成上传文件的目录

        File fileupLoad = new File(“D:/work space/JSP workspace/jsp_servlet_upAndLoad/file”,”upLoad”);

        fileupLoad.mkdir();

        //saveFile 对象指向要保存的文件

        File saveFile = new File(“D:/work space/JSP workspace/jsp_servlet_upAndLoad/file/upLoad”,filename);

        RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile,”rw”);

        //找到上传文件数据的结束位置,即倒数第四行

        randomFile.seek(randomFile.length());

        long endPosition = randomFile.getFilePointer();

        int j = 1;

        while((endPosition>=0)&&(j<=4)){

            endPosition–;

            randomFile.seek(endPosition);

            if(randomFile.readByte()==’n’){

                j++;

            }

        }

        //从上传文件数据的开始位置到结束位置,把数据写入到要保存的文件中

        randomFile.seek(forthEnterPosition);

        long startPoint = randomFile.getFilePointer();

        while(startPoint<endPosition){

            randomAccessFile.write(randomFile.readByte());

            startPoint = randomFile.getFilePointer();

        }

        //关闭文件输入、输出

        randomAccessFile.close();

        randomFile.close();

        tempFile.delete();

其中CodeToString()方法是一个中文字符处理的方法。如果文件不进行编码转换,则上传后的文件名将会是乱码,接收的文件数据也会是乱码:
下面是CodeToString()源代码:

代码如下:

//处理中文字符串的函数

    public String codeString(String str){

        String s = str;

        try {

            byte[] temp = s.getBytes(“utf-8”);

            s = new String(temp);

            return s ;

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

            return s;

        }

    }

二:文件下载

实现文件下载的最简单的方法就是使用超链接。假设在服务器上web目录下地upload子目录存在user.doc这个文档。如:
<a href=”http://localhost:8080/upload/user.doc”>下载user.doc</a>
当单击这个超级链接时,将会在浏览器中直接打开这个文档,就像是把word软件嵌入在浏览器中一样。
打开文档后就可以实现另存为了。当然在web上,最常见的方式是单击链接后,出现“另存为”对话框:

代码如下:

//获取要下载的文件名

        String filename = request.getParameter(“name”);

        //得到想客服端输出的输出流

        OutputStream outputStream = response.getOutputStream();

        //输出文件用的字节数组,每次向输出流发送600个字节

        byte b[] = new byte[600];

        //要下载的文件

        File fileload = new File(“D:/work space/JSP workspace/jsp_servlet_upAndLoad/file/upLoad”,filename);       

        //客服端使用保存文件的对话框

        response.setHeader(“Content-disposition”, “attachment;filename=”+filename);

        //通知客服文件的MIME类型

        response.setContentType(“application/msword”);

        //通知客服文件的长度

        long fileLength = fileload.length();

        String length = String.valueOf(fileLength);

        response.setHeader(“Content_length”, length);

        //读取文件,并发送给客服端下载

        FileInputStream inputStream = new FileInputStream(fileload);

        int n = 0;

        while((n=inputStream.read(b))!=-1){

            outputStream.write(b,0,n);

        }

在该程序中,response对象的setContentType()用来定义服务器发送给客服端内容的MIME类型。这里对MIME就不特别介绍了。事实上,凡是浏览器能处理的所有资源都有对应的MIME资源类型。在与服务器的交互中,浏览器就是对html、jsp等文件浏览器直接将其打开。对于word、excel等浏览器自身不能打开的文件则调用相应的方法。对于没有标记MIME类型的文件。浏览器则根据其扩展名和文件内容猜测其类型。。。

转载请注明:代码学堂>编程开发 > jsp教程 > jsp实现文件上传下载的程序示例

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!10210454@qq.com
2. 本站不保证所提供所有下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有RB奖励和额外RMB收入!

磊宇堂正在使用的服务器 维护管理由磊宇云服务器提供支持

磊宇堂 » jsp实现文件上传下载的程序示例

提供最优质的资源集合

立即查看 了解详情