`

jsp中实现一个页面纯io流上传文件

阅读更多

jsp中实现一个页面纯io流上传文

下面是upLoag.html 

<html> 
<head> 
<title>文件上传</title> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
</head> 
<body> 
<b>文件上传</b></font></p> 

<form name="UploadForm" enctype="multipart/form-data" method="post" action="Xs.jsp"> 
<input type="file" name="File1" size="20" maxlength="20"> <br> 
<input type="submit"value="上传"> 
</form> 

</body> 
</html> 


 

下面是Xs.jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@page import="java.io.*"%>
<%@page import="java.sql.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'Xs.jsp' starting page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">    
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
  
  <body> 
  
     <%!
   //此方法用于将指定的文本转换成ISO-8859-1字符编码格式
   public String codeToString(String str) {
       String s = str;
       try {
         byte tempB[] = s.getBytes("ISO-8859-1");
         s = new String(tempB);
         return s;
       }
       catch (Exception e) {
         return s;
       }
   }
   %>
   
   <%
   //声明一个临时文件名
   String tempFileName = new String("tempFileName1");
   //在D盘建立一个临时文件,名为tempFileName
   File tempFile1 = new File("D:/", tempFileName);
   //根据指定的这个临时文件,来创建一个文件字节输出流(用于向磁盘写文件)
   FileOutputStream outputFile1 = new FileOutputStream(tempFile1);
   //由返回一个文件字节输入流(用于读文件)
   InputStream fileSource1 = request.getInputStream();
   //实例一个字节数组初始为1000kb
   byte b[] = new byte[1000];
   int n;
   //利用while循环,先读出这个文件大小,判断为不为-1,如果不为-1就输出数据,向磁盘写文件数据
   while ((n = fileSource1.read(b)) != -1) {
       outputFile1.write(b, 0, n); //将 n 个字节从b字节数组写入到outputFile1文件,偏移量从0开始
   }
   //关闭文件输出流
   outputFile1.close();
   //关闭文件输入流
   fileSource1.close();
   //实例化一个RandomAccessFile 对象.创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。
   //将创建一个新的 FileDescriptor 对象来表示此文件的连接。
   //mode 参数指定用以打开文件的访问模式。允许的值及其含意为:
   //"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
   //"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
   //"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到基础存储设备。
   //"rwd"   打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到基础存储设备。
   RandomAccessFile randomFile1 = new RandomAccessFile(tempFile1, "r");
   //读取文本的下一行
   randomFile1.readLine();
   //读取文本的下一行返回一个String
   String FilePath = randomFile1.readLine();
   //对页面首次加载进行处理
   if(FilePath == null)
   {
    FilePath = "";
   }else
   {
   //得到最后一次出现\\符号的索引位置
   int position = FilePath.lastIndexOf('\\');
   //将截取到的文本(position + 1, FilePath.length() - 1)转换成ISO-8859-1格式的字符串(得到文件的名字)
   String filename = codeToString(FilePath.substring(position + 1, FilePath.length() - 1));
   //设置randomFile1文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
   randomFile1.seek(0);
   //设置一个向前键入的索引位置
   long forthEnterPosition = 0;
   //设置一个向前的索引位置
   int forth = 1;
   while ((n = randomFile1.readByte()) != -1 && (forth <= 4))
       if (n == '\n') {
         //向前键入的位置为文件中的当前偏移量。
         forthEnterPosition = randomFile1.getFilePointer();
         forth++;
       }
   //由给定的虚拟路径返回一个真正的路径(这个虚拟路径由ServletContext.getRealPath("/")方法得到)相当于新建一个文件夹
   File FileUploadDir = new File(request.getSession().getServletContext().getRealPath("/"), "upLoadFile");
   //创建此抽象路径名指定的目录。
   FileUploadDir.mkdir();
   //在这个路径下新建一个文件,文件名就是上面得到的文件名
   File saveFile1 = new File(request.getSession().getServletContext().getRealPath("/") + "upLoadFile/", filename);
   //创建从中读取和向其中写入(可选)的随机存取文件流,访问模式为 可读可写
   RandomAccessFile randomFile2 = new RandomAccessFile(saveFile1, "rw");
   //设置randomFile2文件的偏移量为randomFile1的长度
   randomFile1.seek(randomFile1.length());
   //得到randomFile1的文件偏移量赋给endPosition
   long endPosition = randomFile1.getFilePointer();
   int j = 1;
   while ((endPosition >= 0) && (j <= 4)) {
       endPosition--;
       randomFile1.seek(endPosition);
       if (randomFile1.readByte() == '\n')
         j++;
   }
   //重新设置randomFile1的文件偏移量
   randomFile1.seek(forthEnterPosition);
   //得到randomFile1的文件偏移量赋给startpoint
   long startPoint = randomFile1.getFilePointer();
   //如果开始索引处小于最后的索引处-1.因为最后一个是'\n',
   while (startPoint < endPosition - 1) {
       //就给randomFile2文件写入randomFile1的所有字节数据..就相当于复制
       randomFile2.write(randomFile1.readByte());
       //重新设置开始索引为randomFile1的文件偏移量
       startPoint = randomFile1.getFilePointer();
   }
   //关闭randomFile2
   randomFile2.close();
   //关闭randomFile1
   randomFile1.close();
   //删除临时文件
   tempFile1.delete();
   //提示xx文件上传成功
   out.print("文件:" + filename + " 上传成功!<br>");
   }
   %>
    
    <form action="Xs.jsp" method=post enctype="multipart/form-data">
     <input type="file" name="upfile" size="30">
     <br>
     <input type="submit" name="submit" value="commit">
    </form>
  </body>
</html>

 

 

分享到:
评论

相关推荐

    java网站开发结合jsp写的上传以及批量上传文件代码

    // 3:设置允许上传文件的大小 .这里是3m su.setMaxFileSize(3 * 1024 * 1024); // 4:初始化,接受页面传递过来的请求 su.initialize(getServletConfig(), request, response); // 5:上传 su....

    JSP大文件上传控件-access-utf8

    开发人员能够非常容易的在自已的系统中实现断点续传功能。 产品特点如下: 1. 为TB级文件提供稳定传输功能。 2. 优化MD5组件,文件扫描速度提升70%。 3. 保护磁盘,上传超大文件时,磁盘IO次数降低50%。 4. 采用...

    Jsp+Servlet实现文件上传下载 文件上传(一)

    文件上传和下载功能是Java Web必备技能,很实用。 本文使用的是Apache下的著名的文件上传组件 org.apache.commons.fileupload 实现 下面结合最近看到的一些资料...第二步、编写JSP页面 &lt;&#37;@ page contentType=te

    使用I/O流在jsp+servlet实现上传和下载

    有感于各种方法的上传和下载,比较麻烦,我使用简单的输入输出流,读取文件信息,实现把指定文件上传到服务器以及在页面使用脚本window.open()的方式,实现从服务器端的下载。供大家参考!不足之处,欢迎指出,不胜...

    JSP 文件上传

    JSP 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器。上传的文件可以是文本文件或图像文件或任何文档。 本章节我们使用 Servlet 来处理文件上传,使用到的文件有: upload.jsp : 文件上传表单。 ...

    JSP页面文件上传下载实例

    本项目IDE : IntelliJ IDEA 2017.2 x64 完成时间:2017/08/31 Eclipse用户请自行做相应修改(主要是Servlet配置)

    用servlet写的文件上传及下载功能带进度条

    com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 com.fm.MyPreogressListener:一个进度监听类,用来做上传进度条的 jquery-1.9.1.js index.jsp:文件列表页面 upload.jsp:文件上传form...

    struts2中的文件上传和下载

    2.其次JSP页面中的文件上传控件所在的form必须设置属性enctype="multipart/form-data" 3.再次,struts2中文件上传将底层高度封装了。在使用时只需要在ACTION中添加三个字段(其中 List&lt;File&gt; files为必填项),...

    上传文件fileupload+解决enctype= multipart/form-data无法传递其他参数

    解决上传文件enctype= multipart/form-data 时无法传递其他参数的问题,以及项目全局编码问题。用的插件是commons io + commons fileupload

    Struts2上传文件出错

    -- 系统常量定义,定义上传文件字符集编码 --&gt; &lt;constant name="struts.i18n.encoding" value="UTF-8"&gt;&lt;/constant&gt; &lt;!-- 系统常量定义,定义上传文件临时存放路径 --&gt; ...

    java 编写文件上传类简单易用

    在用户提交请求后,将文件数据和其他表单信息编码并上传至服务器端,服务器端(通常是一个 cgi 程序)将上传的内容进行解 码了,提取出 HTML 表单中的信息,将文件数据存入磁盘或数据库。 -------------------...

    jspsmart.jar包及帮助文档

     这个类包装了一个上传文件的所有信息。通过它,可以得到上传文件的文件名、文件大小、扩展名、文件数据等信息。  File类主要提供以下方法: 1、saveAs作用:将文件换名另存。 原型: public void saveAs(java...

    Apache Commons fileUpload实现文件上传

    执行解析后,所有的表单项目都保存在一个List中。 ServletFileUpload upload = new ServletFileUpload(factory); List&lt;FileItem&gt; items = upload.parseRequest(request); Iterator&lt;FileItem&gt; itr = items....

    JAVA上百实例源码以及开源项目

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    java源码包---java 源码 大量 实例

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    java源码包2

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

    JAVA上百实例源码以及开源项目源代码

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    java源码包3

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

    java源码包4

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

Global site tag (gtag.js) - Google Analytics