zoukankan      html  css  js  c++  java
  • jsp文件上传

    <%@ page contentType="text/html; charset=GBK"%>
    <%@ page import="java.io.*"%>
    <%@ page import="java.util.*"%>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>文件上传</title>
    </head>

    <%
      try{
       String temp =(String)session.getId();
       File f1=new File((String)request.getSession().getServletContext().getRealPath("upload")+"/",temp);    //获得上传文件所在的目录录,并加上sessionId
       out.println(f1);
       FileOutputStream o=new FileOutputStream(f1);                         //文件输出流指向上传文件所在路径
       out.println(o);
       InputStream in=request.getInputStream();                             //从客户端获得文件输入流
       int n;
       byte b[]=new byte[10000000];//设置缓冲数组的大小
       while((n=in.read(b))!=-1){
       o.write(b,0,n);                                                  //将数据从输入流读入到缓冲数组然后再从缓冲数组写入到文件中
       }
    o.close();
    in.close();     //关闭输入流和文件输出流


      RandomAccessFile random=new RandomAccessFile(f1,"r");              //文件随机读取写入流
      int second=1;
      String secondLine=null;
      while(second<=2){
       secondLine=random.readLine();//读入临时文件名
       second++;
      }
      int position=secondLine.lastIndexOf('\\');
      String filename=new String((secondLine.substring(position+1,secondLine.length()-1)).getBytes("iso-8859-1"),
      "gb2312");//去掉临时文件名中的sessionId,获得文件名,并用iso-8859-1编码,避免出现中文乱码问题

      random.seek(0);
      long forthEnPosition=0;
      int forth=1;
      while((n=random.readByte())!=1&&forth<=4){
       if(n=='\n'){
        forthEnPosition=random.getFilePointer();
        forth++;
       }//去掉临时文件开头的4个'\n'字符
      }
     
      File f2=new File((String)request.getSession().getServletContext().getRealPath("upload")+"/",filename);
      //以文件的名创建另一个文件随机读取                                                                                                
      RandomAccessFile random2=new RandomAccessFile(f2,"rw");                                                                                                
      random.seek(random.length());
      long endPosition=random.getFilePointer(); //以文件的名创建另一个文件随机读取写入流
      int j=1;
      long mark=endPosition;
      while(mark<=0&&j<=6){  //去掉临时文件末尾的6个'\n'字符
       mark--;
       random.seek(mark);
       n=random.readByte();
       if(n=='\n'){
        endPosition=random.getFilePointer();
        j++;
       }        
      }
      random.seek(forthEnPosition);
      long startPosition=random.getFilePointer();
      while(startPosition<endPosition-1){//将临时文件去掉头尾后写入到新建的文件中
       n=random.readByte();
       random2.write(n);                                                 
       startPosition=random.getFilePointer();
      }
      random2.close();
      random.close();
      f1.delete();
    %>

    <script language="javascript">alert("文件上传成功!");</script>
    <%
    } catch (Exception e) {
    e.printStackTrace();
    out.println("上传文件失败!");
    }
    %>
    </body>
    </html>
  • 相关阅读:
    【bzoj4591】[Shoi2015]超能粒子炮·改 Lucas定理
    【bzoj1604】[Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 旋转坐标系+并查集+Treap/STL-set
    十分钟看懂图像语义分割技术
    命令行执行python模块时提示ImportError: No module named xxx
    python json与字典对象互相转换
    C#中json字符串的序列化和反序列化
    Python当前线程休眠1秒钟
    python之bytes和string
    Win32 基本文件读写操作
    C# 字符串与字节数组相互转换
  • 原文地址:https://www.cnblogs.com/harbin1900/p/8480986.html
Copyright © 2011-2022 走看看