Struts 文件上传

1.创建一个工程:

创建一个JSP页面内容如下:

  <body>

   <form action="uploadAction.do" method="post" enctype="multipart/form-data" >

   <input type="file" name="file">

   <input type="submit">

   </form>

  </body>

2.创建一个FormBean继承ActionForm

其中有个private FormFile file ;属性。FormFile类的全名为:org.apache.struts.upload.FormFile

3.创建一个UploadAction继承自Action

然后重写Actionexecute()方法:

代码如下:

public ActionForward execute(ActionMapping mapping, ActionForm form,

                            HttpServletRequest request, HttpServletResponse response) {

                   UploadForm uploadForm = (UploadForm) form;

                   if(uploadForm.getFile()!=null)

                            FileUtil.uploadFile(uploadForm.getFile(), "e:/abc/accp");

                   return null;

}

4.创建FileUtil工具类,里面实现上传的文件的方法:

关键代码如下:

  1. package com.util;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.io.OutputStream;
  10. import java.util.Date;
  11. import java.util.Random;
  12. import org.apache.struts.upload.FormFile;
  13. public class FileUtil 
  14. {
  15.     /**
  16.      * 创建空白文件
  17.      * @param fileName 文件名
  18.      * @param dir 保存文件的目录
  19.      * @return
  20.      */
  21.     private static File createNewFile(String fileName,String dir)
  22.     {
  23.         
  24.         File dirs = new File(dir);
  25.         //看文件夹是否存在,如果不存在新建目录
  26.         if(!dirs.exists())
  27.             dirs.mkdirs();
  28.         
  29.         //拼凑文件完成路径
  30.         File file = new File(dir+File.separator+fileName);
  31.         
  32.             try {
  33.                 
  34.                 //判断是否有同名名字,如果有同名文件加随机数改变文件名
  35.                 while(file.exists())
  36.                 {
  37.                     int ran = getRandomNumber();
  38.                     String prefix = getFileNamePrefix( fileName);
  39.                     String suffix = getFileNameSuffix( fileName);
  40.                     String name = prefix+ran+"."+suffix;
  41.                     file = new File(dir+File.separator+name);
  42.                 }
  43.                 
  44.                 file.createNewFile();
  45.                 
  46.             } catch (IOException e) {
  47.                 // TODO Auto-generated catch block
  48.                 e.printStackTrace();
  49.             }
  50.             return file;
  51.     }
  52.     /**
  53.      * 获得随机数
  54.      * @return
  55.      */
  56.     private  static int getRandomNumber()
  57.     {
  58.         Random random = new Random(new Date().getTime());
  59.         
  60.         return Math.abs(random.nextInt());
  61.     }
  62.     /**
  63.      * 分割文件名 如a.txt 返回 a
  64.      * @param fileName 
  65.      * @return
  66.      */
  67.     private static String getFileNamePrefix(String fileName)
  68.     {
  69.         int dot = fileName.lastIndexOf(".");
  70.         
  71.         return fileName.substring(0,dot);
  72.     }
  73.     /**
  74.      * 获得文件后缀
  75.      * @param fileName
  76.      * @return
  77.      */
  78.     private static String getFileNameSuffix(String fileName)
  79.     {
  80.         int dot = fileName.lastIndexOf(".");
  81.         
  82.         return fileName.substring(dot+1);
  83.     }
  84.     
  85.     public static void main(String args[])
  86.     {
  87.         System.out.println(getRandomNumber());
  88.     }
  89.     /**
  90.      * 上传文件
  91.      * @param file
  92.      * @param dir
  93.      * @return
  94.      */
  95.     public static String uploadFile(FormFile file,String dir)
  96.     {
  97.         //获得文件名
  98.         String fileName = file.getFileName();
  99.         InputStream in = null;
  100.         OutputStream out  = null;
  101.         try 
  102.         {
  103.             in = new BufferedInputStream(file.getInputStream());//构造输入流
  104.             File f = createNewFile(fileName,dir);
  105.              out = new BufferedOutputStream(new FileOutputStream(f));//构造文件输出流
  106.             byte[] buffered = new byte[8192];//读入缓存
  107.             int size  =0;//一次读到的真实大小
  108.             while((size=in.read(buffered,0,8192))!=-1)
  109.             {
  110.                 out.write(buffered,0,size);
  111.             }
  112.             out.flush();
  113.             
  114.         } catch (FileNotFoundException e) {
  115.             // TODO Auto-generated catch block
  116.             e.printStackTrace();
  117.         } catch (IOException e) {
  118.             // TODO Auto-generated catch block
  119.             e.printStackTrace();
  120.         }
  121.         finally
  122.         {
  123.             try {
  124.                 if(in != null) in.close();
  125.             } catch (IOException e) {
  126.                 // TODO Auto-generated catch block
  127.                 e.printStackTrace();
  128.             }
  129.             try {
  130.                 if(out != null) out.close();
  131.             } catch (IOException e) {
  132.                 // TODO Auto-generated catch block
  133.                 e.printStackTrace();
  134.             }
  135.         }
  136.         return null;
  137.     }
  138. }
 

你可能感兴趣的:(Struts 文件上传)