• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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(startPointendPosition){
                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中点击图片弹出文件上传界面及预览功能的实现
    • Jsp+Servlet实现文件上传下载 文件上传(一)
    • AJAX和JSP实现的基于WEB的文件上传的进度控制代码
    • jsp文件上传与下载实例代码
    • jsp中点击图片弹出文件上传界面及实现预览实例详解
    • 利用jsp+Extjs实现动态显示文件上传进度
    • jsp 文件上传浏览,支持ie6,ie7,ie8
    • servlet+JSP+mysql实现文件上传的方法
    • JSP实现文件上传功能
    上一篇:jsp引用servlet生成的验证码代码演示
    下一篇:java servlet过滤器使用示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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