⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uploadaction.jsp~39~

📁 使用J2EE实现了软件园的下载和上传功能
💻 JSP~39~
字号:
<%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.io.*,java.util.*,java.text.*"%>
<%@include file="top.jsp"%>
<%!
  public String codeString(String s) {
    String str = s;
    try {
      byte b[] = str.getBytes("ISO-8859-1");
      str = new String(b);
      return str;
    }
    catch (Exception e) {
      return "error";
    }
  }
%>
<html>
<head>
<title>FileUpload</title>
</head>
<script language="JavaScript" type="">
function check(form){
    if(isEmpty(form.softwareName.value) || isEmpty(form.softwareInfor.value)){
			alert("请将必填项填写完整!");
			return false;
		}
		return true;
	}
	function isEmpty(str){
		if(str==null || str.length==0)
			return true;
		else
			return false;
	}
</script>
<body>
<center>
  <h1>
  <%
    request.setCharacterEncoding("gb2312");
    //response.setContentType("text/html; charset=GB2312");
    double softwareSize = 0;
    double size;
    String softwareSizeStr = "";
    String turefileAbsolutePath = "";
    String dir = "E:/Download";
    File updir = new File(dir); //Download文件不存在的话,在E盘目录下创建一个Download文件夹
    updir.mkdir(); //创建此抽象路径名指定的目录
    try {
      //建立临时文件,并将客户提交的全部信息存入。
      //File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
      File tempfile = new File(dir, "TempInformation");
      System.out.println("tempfileName: " + tempfile.getName());
      System.out.println("tempfileAbsolutePath: " + tempfile.getAbsolutePath());
      //FileOutputStream(File file)创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
      FileOutputStream fout = new FileOutputStream(tempfile);
      InputStream in = request.getInputStream();
      byte b[] = new byte[1024];
      int n = 0;
      while ((n = in.read(b)) != -1) {
        //read(byte[] b)从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。
        fout.write(b, 0, n); //write(byte[] b, int off, int len)将指定字节数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
      }
      fout.close();
      in.close();
      //打开临时文件
      //RandomAccessFile(File file, String mode)创建从中读取和向其中写入(可选)的随机存取文件流,该文件由 File 参数指定。
      RandomAccessFile raf = new RandomAccessFile(tempfile, "r");
      String secondLine = raf.readLine();
      //System.out.println(secondLine);
      secondLine = raf.readLine();
      //System.out.println(secondLine);
      int position = secondLine.lastIndexOf('\\');
      if (position != -1) {
        //获得客户提交的文件名字。
        String filename = secondLine.substring(position + 1, secondLine.length() - 1);
        filename = new String(filename.getBytes("iso8859-1"), "gb2312");
        System.out.println("filename: " + filename);
        int position2 = secondLine.lastIndexOf(':');
        String filePath = secondLine.substring(position2 - 1, secondLine.length() - 1);
        System.out.println("filePath: " + filePath);
        //获得临时文件Information的第4行结束和倒数第六行结束的位置,这两者之间的数据就是客户要提交的文件的内容。
        //获取这段内容并存入另外一个文件中,另一个文件的名字与客户提交的文件名字相同。
        //seek(long pos)设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
        raf.seek(0);
        long forthEndPosition = 0;
        int forth = 1;
        //readByte()从此文件读取一个有符号的八位值。
        while ((n = raf.readByte()) != -1 && (forth <= 4)) {
          if (n == '\n') {
            forth++;
            //getFilePointer()返回此文件中的当前偏移量。
            forthEndPosition = raf.getFilePointer();
          }
        }
        raf.seek(raf.length());
        long endPosition = raf.getFilePointer();
        long mark = endPosition;
        int j = 1;
        while ((mark >= 0) && (j <= 6)) {
          mark--;
          raf.seek(mark);
          n = raf.readByte();
          if (n == '\n') {
            endPosition = raf.getFilePointer();
            j++;
          }
        }
        //以客户提交的文件的名字新建文件
        //从临时文件中读取数据存入这个文件
        File truefile = new File(dir, filename);
        turefileAbsolutePath = truefile.getAbsolutePath();
        String path = turefileAbsolutePath;
        System.out.println("truefileAbsolutePath: " + turefileAbsolutePath);
        RandomAccessFile raf2 = new RandomAccessFile(truefile, "rw");
        raf.seek(forthEndPosition);
        long startPoint = raf.getFilePointer();
        while (startPoint < endPosition - 1) {
          n = raf.readByte();
          raf2.write(n);
          startPoint = raf.getFilePointer();
        }
        raf.close();
        raf2.close();
        //tempfile.delete();//删除临时文件
        out.print("<h2>文件上传成功,请填写相关信息!</h2>");
        //获取文件大小
        File ff = new File(path);
        FileInputStream stream = new FileInputStream(ff);
        int softwareSizeM = stream.available() / 1024 / 1024; //文件长度(单位M)
        int softwareSizeK = stream.available() / 1024; //文件长度(单位K)
        int softwareSizeB = stream.available(); //文件长度(单位B)
        if (softwareSizeM > 0) {
          size = stream.available();
          size = size / (1024 * 1024);
          DecimalFormat df = new DecimalFormat("##.00");
          size = Double.parseDouble(df.format(size));
          softwareSize = size;
          softwareSizeStr = String.valueOf(softwareSize) + "M";
        }
        else if (softwareSizeK > 0) {
          size = stream.available();
          size = size / 1024;
          DecimalFormat df = new DecimalFormat("##.00");
          size = Double.parseDouble(df.format(size));
          softwareSize = size;
          softwareSizeStr = String.valueOf(softwareSize) + "KB";
        }
        else {
          size = stream.available();
          DecimalFormat df = new DecimalFormat("##.00");
          size = Double.parseDouble(df.format(size));
          softwareSize = size;
          softwareSizeStr = String.valueOf(softwareSize) + "B";
        }
        System.out.println("文件大小:" + softwareSize);
      }
      else {
        tempfile.delete(); //删除临时文件
        out.print("请确认路径是否正确!");
      }
    }
    catch (IOException e) {
      out.print("error!");
    }
    //out.println("文件上传成功,请填写相关信息!");
    //response.setHeader("refresh", "0;url='uploadMain.jsp'");
    String dateNow = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
    System.out.println(dateNow);
    //System.out.println("truefileAbsolutePath: "+turefileAbsolutePath);
  %>
  </h1>
  <FORM method="POST" action="softwareAdd.jsp" onsubmit="return check(this)">
  <center>
    <table border="1px #76aef0 solid" cellspacing="0" cellpadding="1" align=center bgColor=#99cc00 width="70%">
      <tr>
        <td width="100%" colspan="2" align="center">
          <font size=5>软件信息</font>
        </td>
      </tr>
      <tr>
        <td width="30%" align="center">软件ID:</td>
        <td width="70%">
          <input type="text" size="50%" name="softwareID" disabled="disabled" value="<%=dateNow%>"/>
          <input type="hidden" size="50%" name="ID" value="<%=dateNow%>"/>
        </td>
      </tr>
      <tr>
        <td width="30%" align="center">软件名称:</td>
        <td width="70%">
          <input type="text" size="50%" name="softwareName"/>
        </td>
      </tr>
      <tr>
        <td width="30%" align="center">软件大小:</td>
        <td width="70%">
          <input type="text" size="50%" name="softwareSize" disabled="disabled" value="<%=softwareSizeStr%>"/>
          <input type="hidden" size="50%" name="Size" value="<%=softwareSizeStr%>"/>
        </td>
      </tr>
      <tr>
        <td width="30%" align="center">软件类型:</td>
        <td width="70%">
          <select name="select1" onChange="this.form.softwareType.value=this.options[this.selectedIndex].value">
            <option value="系统工具">系统工具</option>
            <option value="书籍教程">书籍教程</option>
            <option value="图形图像">图形图像</option>
            <option value="多媒体类">多媒体类</option>
          </select>
          <input align="middle" type=hidden name=softwareType size=10 value="系统工具">
        </td>
      </tr>
      <tr>
        <td width="30%" align="center">存储路径:</td>
        <td width="70%">
          <input type="text" size="50%" name="softwarePath" disabled="disabled" value="<%=turefileAbsolutePath%>"/>
          <input type="hidden" size="50%" name="Path" value="<%=turefileAbsolutePath%>"/>
        </td>
      </tr>
      <tr>
        <td width="30%" align="center">软件简介:</td>
        <td width="70%">
          <input type="text" size="50%" name="softwareInfor"/>
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <center>
            <input type="submit" value="确定" class="button"/>
          </center>
        </td>
      </tr>
    </table>
  </center>
  </FORM>
</center>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -