首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts1多文件下传

2012-10-15 
struts1多文件上传news.jsp form action%path %/news.do?methodadd methodpost enctypemulti

struts1多文件上传

news.jsp

<form action="<%=path %>/news.do?method=add" method="post" enctype="multipart/form-data">
   <input type="hidden" name="id" value="${news.id }">
   <table width="90%" border="0" align="left" cellpadding="0" cellspacing="1" name="title" size="30"></td>
    </tr>
    <tr>
    <td name="subTitle" size="30"></td>
    </tr>
    <tr>
    <td name="content"></textarea></td>
    </tr>
     <tr>
    <td id="more"><input type="file" name="uploadFile[0].file" size="30"><input type="button" onclick="addFile();" value="增加"></td>
    </tr>
    <tr>
    <td name="modelId">
       </select>
    </td>
    </tr>
    <tr>
    <td align="center" colspan="2">
       <input type="submit" value="保存">&nbsp;&nbsp;&nbsp;&nbsp;
       <input type="reset" value="重置">
    </td>
    </tr>
   </table>
   </form>

<script type="text/javascript">
   var t = 1;
   function addFile()
   {
    var parent = document.getElementById("more");

    var br = document.createElement("br");
    var input = document.createElement("input");
    var button = document.createElement("input");

    input.type = "file";
    input.name = "uploadFile[" + (t++) + "].file";
    input.size = "30";
    button.type = "button";
    button.value = "删除";

    button.onclick = function()
    {
     parent.removeChild(br);
     parent.removeChild(input);
     parent.removeChild(button);
   
    };

    parent.appendChild(br);
    parent.appendChild(input);
    parent.appendChild(button);
   }
</script>


newsForm.java

package com.ahhffl.struts.forms;

import java.util.ArrayList;
import java.util.List;

import org.apache.struts.action.ActionForm;

public class NewsForm extends ActionForm{

/**
*
*/
private static final long serialVersionUID = 1L;

private String id;

private String title;

private String subTitle;

private String content;

private String modelId;

private List myFiles;


public List getMyFiles() {
   return myFiles;
}

public void setMyFiles(List myFiles) {
   this.myFiles = myFiles;
}

public NewsForm() {
   myFiles = new ArrayList();
}

// 注意这个方法的定义 不加中间的循环是会出错的

public UploadFile getUploadFile(int index) {
   int size = myFiles.size();
   if (index > size - 1) {
    for (int i = 0; i < index - size + 1; i++) {
     myFiles.add(new UploadFile());
    }
   }
   return (UploadFile) myFiles.get(index);
}



public String getModelId() {
   return modelId;
}

public void setModelId(String modelId) {
   this.modelId = modelId;
}


public String getId() {
   return id;
}

public void setId(String id) {
   this.id = id;
}

public String getTitle() {
   return title;
}

public void setTitle(String title) {
   this.title = title;
}

public String getSubTitle() {
   return subTitle;
}

public void setSubTitle(String subTitle) {
   this.subTitle = subTitle;
}

public String getContent() {
   return content;
}

public void setContent(String content) {
   this.content = content;
}

}


UploadFile.java

package com.ahhffl.struts.forms;

import java.io.Serializable;

import org.apache.struts.upload.FormFile;

public class UploadFile implements Serializable {

private FormFile file;

public FormFile getFile() {
   return file;
}

public void setFile(FormFile file) {
   this.file = file;
}


}


NewsAction.java

public ActionForward add(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
 
   NewsForm newsForm = (NewsForm)form;
   News news = new News();
 
   news.setTitle(newsForm.getTitle());
   news.setSubTitle(newsForm.getSubTitle());
   news.setContent(newsForm.getContent());
   news.setCreateDate(new Date());
 
   String modelId = request.getParameter("modelId");
   Model model = (Model)companyService.getObject(Model.class, modelId);
   news.setModel(model);
 
   //保存图片
   String bathPath = request.getSession().getServletContext().getRealPath("/") + "news";
   //System.out.println(bathPath);
   StringBuffer sb = new StringBuffer();
   List myFiles = newsForm.getMyFiles();
 
   for (int i = 0; i < myFiles.size(); i++) {
    UploadFile uploadFile = (UploadFile) myFiles.get(i);
         FormFile file = uploadFile.getFile();
         String fileType = file.getFileName().substring(file.getFileName().lastIndexOf(".") + 1, file.getFileName().length());
    String fileName = FileUtil.getRandomFileName() + "." + fileType;
    if(file.getFileSize() > 0){
     FileUtil.saveFile(file.getInputStream(), bathPath , fileName);
    }
    sb.append("/news/" + fileName + ";");
   }  
 
   news.setPicturePath(sb.toString());
   companyService.addObject(news);
   return mapping.findForward("add");
}

FileUtil.java

//随即生成文件名
public static String getRandomFileName() {
   StringBuffer buffer =
    new StringBuffer("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
        StringBuffer sb = new StringBuffer();
        Random r = new Random();
        int range = buffer.length();
        for (int i = 0; i < 10; i ++) {
            sb.append(buffer.charAt(r.nextInt(range)));
        }
       
   SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddhhmmss");
        String strCreateTime = fmt.format(new Date().getTime()); //文件创建日期
        return strCreateTime + sb.toString();
}

/**
* 保存文件
*/
public static void saveFile(InputStream stream, String filePath, String fineName) {
   OutputStream bos = null; //文件输出流
   try {
  
    File file = new File(filePath);
    if(!file.exists())
    {
     file.mkdirs();
    }
    file = new File(filePath , fineName);
    bos = new FileOutputStream(file); //通过输出流构建文件
    int bytesRead = 0; //阅读输入文件流的标识
    byte[] buffer = new byte[1024];
    //读取输入流
    while ((bytesRead = stream.read(buffer, 0, buffer.length)) != -1){
       bos.write(buffer, 0, bytesRead);//将文件写入服务器
    }          
   } catch(Exception e) {
   } finally {
    try {
     if(bos != null) bos.close();
     if(stream != null) stream.close();
    } catch (Exception e1) {
    }  
   }
}

热点排行