Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1817|回复: 0

struts1实现多文件上传实例

[复制链接]

该用户从未签到

发表于 2011-8-1 10:04:03 | 显示全部楼层 |阅读模式
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" class="newTable">
    <tr>
    <td class="newTd">新闻标题</td>
    <td class="newTd"><input type="text" name="title" size="30"></td>
    </tr>
    <tr>
    <td class="newTd">新闻副标题</td>
    <td class="newTd"><input type="text" name="subTitle" size="30"></td>
    </tr>
    <tr>
    <td class="newTd">新闻内容</td>
    <td class="newTd"><textarea class="ckeditor" name="content"></textarea></td>
    </tr>
     <tr>
    <td class="newTd">新闻图片</td>
    <td class="newTd" id="more"><input type="file" name="uploadFile[0].file" size="30"><input type="button" value="增加"></td>
    </tr>
    <tr>
    <td class="newTd">新闻所属板块</td>
    <td class="newTd">
       <select id="modelSelect" name="modelId">
       </select>
    </td>
    </tr>
    <tr>
    <td align="center" colspan="2">
       <input type="submit" value="保留">     
       <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) {
    }   
   }
}
回复

使用道具 举报

  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-8-1 10:29:22 | 显示全部楼层
    谢谢楼主分享。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-20 06:25 , Processed in 0.424180 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表