zoukankan      html  css  js  c++  java
  • java 网页 保存上传文件

    网页请求提交到另外一个jsp 进行处理

    • index.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://"
                + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
    <title>My JSP 'fileupload.jsp' starting page</title>
    <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">
    </head>
    
    <body>
        <!-- enctype 默认是 application/x-www-form-urlencoded -->
        <form action="AccepteUploadFile.jsp" enctype="multipart/form-data" method="post">
            上传文件: <input
                type="file" name="file1"><br /> <input type="submit"
                value="提交" />
        </form>
    </body>
    </html>
    • AccepteUploadFile.jsp
    <%@ page contentType="text/html; charset=gb2312" language="java"
        import="java.sql.*" errorPage=""%>
    <%@ page import="java.io.*"%>
    <%!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");//接收上传的文件内容的临时文件的文件名     
        File tempFile1 = new File("f:/", tempFileName);
        FileOutputStream outputFile1 = new FileOutputStream(tempFile1);
        InputStream fileSource1 = request.getInputStream();//得到客户端提交的所有数据     
        byte b[] = new byte[1000];
        int n;
        while ((n = fileSource1.read(b)) != -1)
        {
            outputFile1.write(b, 0, n); //将得到的客户端数据写入临时文件     
        }
        outputFile1.close();
        fileSource1.close();
        out.println("tempfile finish <br/>");
        RandomAccessFile randomFile1 = new RandomAccessFile(tempFile1, "r");
    
        String firstline = randomFile1.readLine();//读取第一行数据    
        out.println("firstline:" + firstline+"<br/>");
        String FilePath = randomFile1.readLine();//读取第二行数据,这行数据包括了文件的路径和文件名     
        int position = FilePath.lastIndexOf('\'); //文件名     
        String filename = codeToString(FilePath.substring(position + 1,
                FilePath.length() - 1));
        out.println("FilePath:" + FilePath+"<br/>");
        randomFile1.seek(0);//重新定位指针到文件头     
        long forthEnterPosition = 0;
        int forth = 1; //得到第4行回车符号的位置,这是上传文件的开始位置     
        while ((n = randomFile1.readByte()) != -1 && (forth <= 4))
            if (n == '
    ')
            {
                forthEnterPosition = randomFile1.getFilePointer();
                forth++;
            }
    
        File saveFile1 = new File("f:/", filename);
        RandomAccessFile randomFile2 = new RandomAccessFile(saveFile1, "rw");
        randomFile1.seek(randomFile1.length());
        long endPosition = randomFile1.getFilePointer();//找到上传的文件数据的结束位置,即倒数第4行     
        int j = 1;
        while ((endPosition >= 0) && (j <= 4))
        {
            endPosition--;
            randomFile1.seek(endPosition);
            if (randomFile1.readByte() == '
    ')
                j++;
        }
        randomFile1.seek(forthEnterPosition);
        long startPoint = randomFile1.getFilePointer();
        while (startPoint < endPosition - 1)
        {
            randomFile2.write(randomFile1.readByte());
            startPoint = randomFile1.getFilePointer();
        }
        randomFile2.close();
        randomFile1.close();
        //tempFile1.delete();
        out.print("file:" + filename + " succeed upload!<br/>");
        response.getWriter().write("hello");
    %>

    网页请求提交到 servlet 进行处理

    • index.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://"
                + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
    <title>My JSP 'fileupload.jsp' starting page</title>
    <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">
    </head>
    
    <body>
        <!-- enctype 默认是 application/x-www-form-urlencoded -->
        <form action="servlet/fileServlet" enctype="multipart/form-data" method="post">
            文件类型: <input type="text" name="filetype"><br />
            上传文件: <input type="file" name="file1"><br /> <input type="submit" value="提交" />
        </form>
    
    </body>
    </html>
    • FileProgressServlet
    • package com;
      
      import java.io.*;
      import java.sql.Date;
      import java.text.SimpleDateFormat;
      import java.util.Iterator;
      import java.util.List;
      import java.util.Random;
      
      import javax.servlet.ServletConfig;
      import javax.servlet.ServletContext;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      import org.apache.commons.fileupload.FileItem;
      import org.apache.commons.fileupload.FileUploadException;
      import org.apache.commons.fileupload.disk.DiskFileItemFactory;
      import org.apache.commons.fileupload.servlet.ServletFileUpload;
      
      /*
       * servlet 保存上传文件
       */
      public class FileProgressServlet extends HttpServlet
      {
      
          private static final long serialVersionUID = -7744625344830285257L;
          private ServletContext sc;
          private String savePath;
      
          public void doGet(HttpServletRequest request, HttpServletResponse response)
                  throws ServletException, IOException
          {
              doPost(request, response);
          }
      
          public void init(ServletConfig config)
          {
              // 在web.xml中设置的一个初始化参数
              savePath = config.getInitParameter("savePath");
              sc = config.getServletContext();
              System.out.println("servler init");
          }
      
          public void doPost(HttpServletRequest request, HttpServletResponse response)
                  throws ServletException, IOException
          {
              request.setCharacterEncoding("UTF-8");
              DiskFileItemFactory factory = new DiskFileItemFactory();
              ServletFileUpload upload = new ServletFileUpload(factory);
              try
              {
                  String type = "";
                  String path = "";
      
                  List<FileItem> items = upload.parseRequest(request);
                  Iterator<FileItem> itr = items.iterator();
                  while (itr.hasNext())
                  {
                      FileItem item = (FileItem) itr.next();
                      if (item.isFormField())
                      {
                          System.out.println("表单参数名:" + item.getFieldName()
                                  + ",表单参数值:" + item.getString("UTF-8"));
                          type = item.getString("UTF-8");
                      }
                      else
                      {
                          path = getdir(type);
                          if (path == "")
                          {
                              request.setAttribute("upload.message", "getpath error");
                          }
                          if (item.getName() != null && !item.getName().equals(""))
                          {
                              System.out.println("上传文件的大小:" + item.getSize());
                              System.out.println("上传文件的类型:" + item.getContentType());
                              System.out.println("上传文件的名称:" + item.getName());
      
                              File tempFile = new File(item.getName());
                              Integer rdm = new Random().nextInt(10000);
                              File file = new File(path, getDataTimeString(true) +rdm.toString()+tempFile.getName().substring(tempFile.getName().indexOf('.')));
                              item.write(file);
                              System.out.println("保存的上传文件:" + file.getPath());
                              request.setAttribute("upload.message", "上传文件成功!");
                          }
                          else
                          {
                              request.setAttribute("upload.message", "没有选择上传文件!");
                          }
                      }
                  }
              }
              catch (FileUploadException e)
              {
                  e.printStackTrace();
                  System.out.println(e.getMessage());
              }
              catch (Exception e)
              {
                  e.printStackTrace();
                  System.out.println(e.getMessage());
              }
              request.getRequestDispatcher("/t2.jsp").forward(request, response);
          }
      
          private String getdir(String filetype)
          {
              if (filetype == null)
              {
                  return "";
              }
              String path = "F:\youme\{0}\" + getDataString() + "\";
              switch (filetype)
              {
                  case "2":
                      path = path.replace("{0}", "image");
                      break;
                  case "3":
                      path = path.replace("{0}", "vedio");
                      break;
                  default:
                      return "";
              }
              try
              {
                  java.io.File file = new java.io.File(path);
                  if (!file.exists())
                  {
                      if (!file.mkdirs())
                      {
                          return "";
                      }
                  }
                  return path;
              }
              catch (Exception ex)
              {
                  return "";
              }
              finally
              {
      
              }
          }
      
          /*
           * 获取当前时间
           */
          private static String getDataTimeString(Boolean isfilename)
          {
              try
              {
                  SimpleDateFormat formatter = null;
                  if (!isfilename)
                  {
                      formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                  }
                  else
                  {
                      formatter = new SimpleDateFormat("yyyyMMddHHmmss");
                  }
                  Date curDate = new Date(System.currentTimeMillis());// 获取当前时间
                  return formatter.format(curDate);
              }
              catch (Exception ex)
              {
                  System.out.println(ex.getMessage());
                  return "";
              }
          }
      
          /*
           * 获取当前日期
           */
          private static String getDataString()
          {
              try
              {
                  SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
                  Date curDate = new Date(System.currentTimeMillis());// 获取当前时间
                  return formatter.format(curDate);
              }
              catch (Exception ex)
              {
                  System.out.println(ex.getMessage());
                  return "";
              }
          }
      }

      注意:这里用了组件commons-fileupload-1.3.jar进行文件操作

    • web.xml配置一下servlet(index.jsp提交路径)
        <servlet>
            <description>This is the description </description>
            <display-name>This is the display name of my J2EE component</display-name>
            <servlet-name>FileProgressServlet</servlet-name>
            <servlet-class>com.FileProgressServlet</servlet-class>
    
            <init-param>
                <param-name>savePath</param-name>
                <param-value>uploads</param-value>
            </init-param>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>FileProgressServlet</servlet-name>
            <url-pattern>/servlet/fileServlet</url-pattern>
        </servlet-mapping>
  • 相关阅读:
    BZOJ 1977: [BeiJing2010组队]次小生成树 Tree( MST + 树链剖分 + RMQ )
    BZOJ 2134: 单选错位( 期望 )
    BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
    BZOJ 2599: [IOI2011]Race( 点分治 )
    BZOJ 3238: [Ahoi2013]差异( 后缀数组 + 单调栈 )
    ZOJ3732 Graph Reconstruction Havel-Hakimi定理
    HDU5653 Bomber Man wants to bomb an Array 简单DP
    HDU 5651 xiaoxin juju needs help 水题一发
    HDU 5652 India and China Origins 并查集
    HDU4725 The Shortest Path in Nya Graph dij
  • 原文地址:https://www.cnblogs.com/w-y-f/p/3314456.html
Copyright © 2011-2022 走看看