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>
  • 相关阅读:
    javascript前端如何使用google-protobuf
    【Linux】Linux中常用操作命令
    MyEclipse 安装svn 插件步骤详情
    MultipartFile(文件的上传)--CommonsMultipartResolver
    oracle sql 获取本季度所有月份,上季度所有月份
    git与github安装、配置
    Java使用JaxWsDynamicClientFactory和HttpURLConnection两种方式调取webservice的接口
    三级联动
    Excel的两种导出入门方法(JAVA与JS)
    页面设置遮罩层
  • 原文地址:https://www.cnblogs.com/w-y-f/p/3314456.html
Copyright © 2011-2022 走看看