网页请求提交到另外一个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>
<%@ 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 进行处理
<%@ 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>
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进行文件操作
<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>