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>
  • 相关阅读:
    命令拷屏之网络工具
    PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 LeetCode 143 重排链表
    Java实现 LeetCode 143 重排链表
  • 原文地址:https://www.cnblogs.com/w-y-f/p/3314456.html
Copyright © 2011-2022 走看看