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 == '\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() == '\n')
            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>

 

posted on 2013-09-11 14:09  ※WYF※  阅读(3125)  评论(0编辑  收藏  举报