JSP上传文件到指定位置实例代码,使用cos实现多个文件上传详解
分类:面向对象

Servlet 代码:

在开发中常常需要上传文件,上传文件的方式有很多种,这里有一个cos实现的例子。

  在我们的web开发中,很多的时候都需要把本机的一些文件上传到web服务器上面去

复制代码 代码如下:

首先是要拷贝cos.jar包拷贝到WEB-INF/lib目录下,然后才进行编码。

如:一个BBS系统,当用户使用这是系统的时候,能把本机的一些图片,文档上传到服务器

 /** 直接取上传的File */
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  String targetPath = request.getRealPath(request.getContextPath()); // 目标存储路径,服务器部署目录下
  request.setCharacterEncoding("UTF-8");
  try {
   DefaultFileItemFactory factory = new DefaultFileItemFactory();
   DiskFileUpload up = new DiskFileUpload(factory);
   List<FileItem> ls = up.parseRequest(request);
   for (FileItem file : ls) {
    if (file.isFormField()) { // 判断是文件还是文本信息
     System.out.println("表单参数名:" + file.getFieldName()+ ",表单参数值:" + file.getString("UTF-8"));
    } else {
     if (file.getName() != null && !file.getName().equals("")) { // 判断是否选择了文件
      File sFile = new File(file.getName());// 构造临时对象,此时文件暂存在服务器的内存当中
      File tFile = new File(targetPath, sFile.getName());
      if(tFile.exists()){
       System.out.println("同名文件已上传!");
      }else{
        //FileUtils.copyFileToDirectory(sFile, tFile);//直接复制并上传到服务器,自动生成上机目录,目录名称与上传文件的名称一致
       FileUtils.copyFile(sFile, tFile); // 直接复制并上传文件到服务器,直接在指定位置生成目标文件
       System.out.println("文件上传成功");
       if (tFile.isDirectory()) { // 删除上传文件
        FileUtils.deleteDirectory(tFile);
       } else if (tFile.isFile()) {
        tFile.delete();
       }
       System.out.println("文件删除成功");
      }
     } else {
      System.out.println("没有选择上传文件!");
     }
    }
   }
  } catch (FileUploadException e) {
   System.out.println("文件上传失败!");
   e.printStackTrace();
  }
 }

创建一个可以进行自动重命名的Java文件FileRenameUtil.java:

上面去。然后其他用户可以去下载这些文件,那么这样的话,我们可以自己编程实现文件的上传

Servlet配置:web.xml

 

但是更好的方式是使用一些已有的组件帮助我们实现这种上传功能。

复制代码 代码如下:

 


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
 xmlns=""
 xmlns:xsi=""
 xsi:schemaLocation="
 ;
  <servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>test.MyServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/servlet/MyServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

[java] view plaincopy


Html页面:

  1. package org.ml.drp.util;  
  2.   
  3. import java.io.File;  
  4. import java.util.Date;  
  5.   
  6. import com.oreilly.servlet.multipart.FileRenamePolicy;  
  7.   
  8. /** 
  9.  * 文件重命名 
  10.  * @author MuLing 
  11.  * 
  12.  */  
  13. public class FileRenameUtil implements FileRenamePolicy {  
  14.   
  15.     public File rename(File file) {  
  16.         String body = "";  
  17.         String ext = "";  
  18.         Date date = new Date();  
  19.         int pot = file.getName().lastIndexOf(".");//取得文件名和后缀分割点  
  20.         if (pot != -1) {//说明后缀存在  
  21.             body = date.getTime() + "";//采用时间的形式命名  
  22.             ext = file.getName().substring(pot);//截取后缀名  
  23.         } else {  
  24.             body = (new Date()).getTime() + "";  
  25.             ext = "";  
  26.         }  
  27.         String newName = body + ext;  
  28.         file = new File(file.getParent(), newName);//对文件进行重命名  
  29.         return file;  
  30.   
  31.     }  
  32.   
  33. }  

复制代码 代码如下:

 

  常用的上传组件:  

<body>
   <form method="post" action="servlet/MyServlet" encType="multipart/form-data" >
    <font color="blue">可直接发布zip文件</font> <br />
          发布流程文件 :<input type="file" name="processDef" />
   <input type="submit"  value="部署"/>
 </form>
  </body>

然后创建一个实现上传功能的servlet,为了方便查看上传情况,所以加入了一些输出语句。

    Apache 的 Commons FileUpload

 

    JavaZoom的UploadBean

FileUploadServlet.java

    jspSmartUpload

 


[java] view plaincopy

FileUpload下载地址:

  1. package org.ml.servlet;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.util.Enumeration;  
  6.   
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import com.oreilly.servlet.MultipartRequest;  
  13.   
  14. /** 
  15.  * 能够进行文件上传的servlet类 
  16.  * @author MuLing 
  17.  * 
  18.  */  
  19. public class UploadServlet extends HttpServlet {   
  20.     private static final long serialVersionUID = 1L;  
  21.   
  22.     public UploadServlet() {  
  23.         super();  
  24.     }  
  25.    
  26.     public void destroy() {  
  27.         super.destroy();    
  28.     }  
  29.    
  30.     @SuppressWarnings("unchecked")  
  31.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  32.             throws ServletException, IOException {  
  33.         // 存绝对路径  
  34.         // String filePath = "C://upload";  
  35.         // 存相对路径  
  36.         String filePath = getServletContext().getRealPath("/") + "upload";  
  37.         System.out.println(filePath);//输出存放上传文件所到的路径  
  38.         File uploadPath = new File(filePath);  
  39.         // 检查文件夹是否存在 不存在 创建一个  
  40.         if (!uploadPath.exists()) {  
  41.             uploadPath.mkdir();  
  42.         }  
  43.         // 文件最大容量 3M  
  44.         int fileMaxSize = 3 * 1024 * 1024;  
  45.         // 存放文件描述  
  46.         @SuppressWarnings("unused")  
  47.         String[] fileDiscription = { null, null };  
  48.         // 文件名  
  49.         String fileName = null;  
  50.         // 上传文件数  
  51.         int fileCount = 0;  
  52.         // 重命名策略  
  53.         RandomFileRenamePolicy rfrp = new RandomFileRenamePolicy();  
  54.         // 上传文件  
  55.         MultipartRequest mulit = new MultipartRequest(request, filePath,  
  56.                 fileMaxSize, "UTF-8", rfrp);//取得上传文件  
  57.   
  58.         String userName = mulit.getParameter("userName");  
  59.         System.out.println(userName);  
  60.   
  61.         Enumeration filesname = mulit.getFileNames();//取得上传的所有文件(相当于标识)   
  62.         while (filesname.hasMoreElements()) {  
  63.             String name = (String) filesname.nextElement();//标识  
  64.             System.out.println(name);  
  65.             fileName = mulit.getFilesystemName(name); //取得文件名  
  66.             String contentType = mulit.getContentType(name);//工具标识取得的文件类型  
  67.             if (fileName != null) {  
  68.                 fileCount++;  
  69.             }  
  70.             System.out.println("文件名:" + fileName);  
  71.             System.out.println("文件类型: " + contentType);   
  72.         }  
  73.         System.out.println("共上传" + fileCount + "个文件!");   
  74.     }  
  75.    
  76.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  77.             throws ServletException, IOException {   
  78.         this.doGet(request, response);  
  79.     }   
  80.       
  81.     public void init() throws ServletException {  
  82.     }  
  83.   
  84. }  

  

 

  下载:commons-fileupload-1.2.2-bin.zip    得到:commons-fileupload-1.2.2.jar

在web.xml文件中的配置servlet如下:

  

 

  下载:commons-io-1.4-bin.zip       得到:commons-io-1.4.jar

 


 

upload.jsp

[html] view plaincopy

代码;

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns=""   
  4.     xmlns:xsi=""   
  5.     xsi:schemaLocation="   
  6.     ;  
  7.   <servlet>   
  8.     <servlet-name>UploadServlet</servlet-name>  
  9.     <servlet-class>org.ml.servlet.UploadServlet</servlet-class>  
  10.   </servlet>  
  11.   
  12.   <servlet-mapping>  
  13.     <servlet-name>UploadServlet</servlet-name>  
  14.     <url-pattern>/UploadServlet</url-pattern>  
  15.   </servlet-mapping>  
  16.     
  17.   <welcome-file-list>  
  18.     <welcome-file>index.jsp</welcome-file>  
  19.   </welcome-file-list>  
  20. </web-app>  

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>using commons Upload to upload file </title>
</head>
<style>
* { font-family: "宋体"; font-size: 14px }
</style>
<body>
<p align="center"> 请您选择需要上传的文件</p>
<form id="form1" name="form1" method="post" action="servlet/fileServlet" enctype="multipart/form-data">
 <table border="0" align="center">
  <tr>
   <td>上传人:</td>
   <td>
    <input name="name" type="text" id="name" size="20" ></td>
  </tr>  
  <tr>
   <td>上传文件:</td>
   <td><input name="file" type="file" size="20" ></td>
  </tr>    
  <tr>   
   <td></td><td>
    <input type="submit" name="submit" value="提交" >
    <input type="reset" name="reset" value="重置" >
   </td>
  </tr>
 </table>
</form>
</body>
</html>

 


上传页面代码如下:

FileUploadServlet.java

 

代码:

 

/**
 *
 */
package com.b510.example;

[html] view plaincopy

import java.io.File;
import java.io.IOException;
import java.util.*;

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>   
  10.   </head>  
  11.     
  12.   <body>  
  13.     <form enctype="multipart/form-data" method = "post" action = "UploadServlet">  
  14.         <input type="text" name="userName" />   
  15.        <p>上传文件1:<input type = "file" name = "File1" size = "20" maxlength = "20"><br></p>  
  16.        <p>上传文件2:<input type = "file" name = "File2" size = "20" maxlength = "20"><br></p>  
  17.        <p>上传文件3:<input type = "file" name = "File3" size = "20" maxlength = "20"><br></p>  
  18.        <p>上传文件4:<input type = "file" name = "File4" size = "20" maxlength = "20"><br></p>  
  19.        <input type = "submit" value = "上传">  
  20.     </form>  
  21.   </body>  
  22. </html>  

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;

注明:本代码是摘抄代码,所有权归   cselmu9 所有!

/**
 *
 * @author XHW
 *
 * @date 2011-7-26
 *
 */
public class FileUploadServlet 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();
 }
 
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  request.setCharacterEncoding("UTF-8");
  DiskFileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory);
  try {
   List items = upload.parseRequest(request);
   Iterator itr = items.iterator();
   while (itr.hasNext()) {
    FileItem item = (FileItem) itr.next();
    if (item.isFormField()) {
     System.out.println("表单参数名:" + item.getFieldName() + ",表单参数值:" + item.getString("UTF-8"));
    } else {
     if (item.getName() != null && !item.getName().equals("")) {
      System.out.println("上传文件的大小:" + item.getSize());
      System.out.println("上传文件的类型:" + item.getContentType());
      // item.getName()返回上传文件在客户端的完整路径名称
      System.out.println("上传文件的名称:" + item.getName());

      File tempFile = new File(item.getName());

  //上传文件的保存路径
      File file = new File(sc.getRealPath("/") + savePath, tempFile.getName());
      item.write(file);
      request.setAttribute("upload.message", "上传文件成功!");
     }else{
      request.setAttribute("upload.message", "没有选择上传文件!");
     }
    }
   }
  }catch(FileUploadException e){
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
   request.setAttribute("upload.message", "上传文件失败!");
  }
  request.getRequestDispatcher("/uploadResult.jsp").forward(request, response);
 }
}


uploadResult.jsp

代码;

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    <title>uploadResult</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">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
 
  <body>
  ${requestScope['upload.message'] }
    <a href="/upload/uploadFile.jsp">上传文件</a>
  </body>
</html>


web.xml

代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
 xmlns=""
 xmlns:xsi=""
 xsi:schemaLocation="
 ">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>FileUploadServlet</servlet-name>
    <servlet-class>com.b510.example.FileUploadServlet</servlet-class>

  <!--设置初始化参数-->
    <init-param>
     <param-name>savePath</param-name>
     <param-value>uploads</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>FileUploadServlet</servlet-name>
    <url-pattern>/servlet/fileServlet</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
    <welcome-file>uploadFile.jsp</welcome-file>
  </welcome-file-list>
</web-app>

本文由10bet手机官网发布于面向对象,转载请注明出处:JSP上传文件到指定位置实例代码,使用cos实现多个文件上传详解

上一篇:手把手教你选拔VB来成立ASP组件1,利用COM手艺的钣金件张开系统的花费 下一篇:没有了
猜你喜欢
热门排行
精彩图文