jsp版文件上传

web.xml中

version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  param>
    <param-name>file-uploadparam-name>
    <param-value>D:/apache-tomcat-7.0.54/webapps/eshop/data/param-value>           // ----->保存文件的路径,前提路径已经存在
  param>

Servlet 中 :

        doPost(){

        ServletContext context = request.getServletContext();
        String filePath = context.getInitParameter("file-upload");
        String contentType = request.getContentType();
        FileUpload.upload(filePath,contentType,request);

        request.getRequestDispatcher("/WEB-INF/jsp/GoodsAction/success.jsp").forward(request, response);
        }

FileUpload.java

package com.wl.eshop.util;

import java.io.File;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUpload {

       public static  void upload(String filePath,String contentType,HttpServletRequest request){

           File file ;
           int maxFileSize = 5000 * 1024;
           int maxMemSize = 5000 * 1024;

           System.out.println("---------------->");

           //-------------->
            // // 验证上传内容了类型
           if ((contentType.indexOf("multipart/form-data") >= 0)) {

                  DiskFileItemFactory factory = new DiskFileItemFactory();



               // 设置内存中存储文件的最大值
                  factory.setSizeThreshold(maxMemSize);
               // 本地存储的数据大于 maxMemSize.
                  factory.setRepository(new File("c:\\temp"));

                  // 创建一个新的文件上传处理程序
                  ServletFileUpload upload = new ServletFileUpload(factory);

//                   设置最大上传的文件大小
                  upload.setSizeMax( maxFileSize );


                  try{ 

                     List fileItems = upload.parseRequest(request);

                     // 解析获取的文件
                     Iterator i = fileItems.iterator(); 

                     while ( i.hasNext () ) 
                     {
                        FileItem fi = (FileItem)i.next(); // -------->使用FileItem写文件


                        if ( !fi.isFormField () )    //  如果不是普通字段
                        {

                        String fieldName = fi.getFieldName(); // ->  input 字段  photo

                        String fileName =   UUID.randomUUID().toString();
                       String mycontent =   new String(fi.getString().getBytes("iso8859-1"), "utf-8");
                        System.out.println("filedName"+fieldName+" "+"fileName "+fileName);
                        boolean isInMemory = fi.isInMemory();
                        long sizeInBytes = fi.getSize();
                        String houzhui ="";
                        // 获取文件的后缀名
                        if(fi.getName().lastIndexOf(".") !=-1&&fi.getName().lastIndexOf(".")!=0){  // 如果1。有后缀且    2.不是 .ss 文件 (.在第一个位置上)
                             houzhui = fi.getName().substring(fi.getName().lastIndexOf("."));
                        }

                        // 如 文件名是   "lovegirl/s.jpg"   文件名裡面有/的情況
                        if( fileName.lastIndexOf("\\") != -1 ){
                            file = new File( filePath,fileName.substring( fileName.lastIndexOf("\\") )+houzhui) ;
                        }
                        else{
                            file = new File( filePath,fileName.substring( fileName.lastIndexOf("\\")+1 )+houzhui) ;
                        }
                            fi.write( file ) ;
                        }

                     }
                  }catch(Exception ex) {
                     System.out.println(ex);
                  }
               }else{
                   System.out.println("-------------->"+"文件上传成功");


               }



           //-------------->






       }


       private static String getFileExtension(File file) {
            String fileName = file.getName();
            if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) {
                return fileName.substring(fileName.lastIndexOf(".") + 1);
            } else {
                return "";
            }
        }


}

ileItem类的常用方法

  1.boolean  isFormField()。isFormField方法用来判断FileItem对象里面封装的数据是一个普通文本表单字段,还是一个文件表单字段。如果是普通文本表单字段,返回一个true否则返回一个false。因此可以用该方法判断是否是普通表单域还是文件上传表单域。
  2.String getName()。getName方法用来获得文件上传字段中的文件名。
  3.String getFieldName()。getFieldName方法用来返回表单标签的name属性的值。
  4.void write(File file)。write方法将FileItem对象中的内容保存到某个指定的文件中。如果FileItem对象中的内容是保存在某个临时文件中,该方法完成后,临时文件可以会被删除。该方法也可以将普通表单字段保存在一个文件中,但最主要的用途是把上传的文件内容保存在本地文件系统中。
  5.String getString()。getString()方法将FileItem对象中保存的数据流内容以一个字符串返回。它有两个重载形式。public java.lang.String getString()和public java.lang.String getString(java.lang.String encodeing) throws java.io.UnsupportedEncodingException。前者使用缺省的字符集编码将主体内容转换成字符串,后者使用参数指定的字符集编码。如果在读取普通表单字段元素的内容时,出现了乱码现象,可以调用第二个方法,并传入 正确的字符集编码名称。
  6.String getContentType()。此方法用来获得上传文件的类型,即标段字段元素描述头属性“content-type”的值,如image/jpeg。如果FileItem对象对应的是普通的表单字段,将返回null。
  7.boolean isInMemory()。判断FileItem对象封装的数据是保存在内存中还是硬盘中。
  8.void  delete()。此方法用来清空FileItem对象中封装的主体内容,如果内容是被保存在临时文件中,该方法会把临时文件删除。
  9.InputStream  getInputStream()。以流的形式返回上传文件的主体内容。
  10.long  getSize()。返回上传文件的大小。

你可能感兴趣的:(超实用工具类,jsp)