JS+Struts2多文件上传实例详解
程序员文章站
2024-02-23 16:47:34
本文实例为大家分享了js struts2多文件上传的具体代码,供大家参考,具体内容如下
1、jsp页面:
js控制增加删除多个上传文件框,代码如下:...
本文实例为大家分享了js struts2多文件上传的具体代码,供大家参考,具体内容如下
1、jsp页面:
js控制增加删除多个上传文件框,代码如下:
<%@ page language="java" pageencoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <%@include file="../../_head.html"%> <title>文件上传</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <script language="javascript" type="text/javascript" src="../js/common/common.js"></script> <script type="text/javascript"> var pos = 1; function addfilecomponent() { var eltable = document.getelementbyid('uploadtable').getelementsbytagname('tbody')[0]; var eltr = document.getelementbyid('filetr'); var eltr2 = document.getelementbyid('op'); var neweletr = eltr.clonenode(true); neweletr.id = "filetr" + pos; neweletr.style.display = ""; inputs = neweletr.getelementsbytagname('input'); inputs[0].id="file" + pos; var elinput = inputs[1]; elinput.onclick=delfilecomponent; elinput.id="delbutton" + pos++; eltable.insertbefore(neweletr, eltr2); } function delfilecomponent() { var eltable = document.getelementbyid('uploadtable').getelementsbytagname('tbody')[0]; var trarr = eltable.getelementsbytagname("tr"); var el = event.srcelement; for(j = 0; j < trarr.length; j++) { tr = trarr[j]; if(tr.getelementsbytagname("input")[1] == el) { eltable.removechild(tr); pos--; break; } } } function isvalidatefile(obj){ var extend = obj.value.substring(obj.value.lastindexof(".")+1); if(extend==""){ }else{ if(!(extend=="xls"||extend=="doc")){ alert("请上传后缀名为xls或doc的文件!"); var nf = obj.clonenode(true); nf.value=''; obj.parentnode.replacechild(nf, obj); return false; } } return true; } </script> </head> <body> <%@ include file="/common/message.jsp"%> <div class="body-box"> <div class="rhead"> <div class="rpos"> 文件上传(可同时上传多份文件) </div> <div class="clear"></div> </div> <s:form id="ops" action="csc_muploadfile" theme="simple" cssclass="rhead" enctype = "multipart/form-data"> <table id="uploadtable" width="100%" border="0"> <tr> <td> <input type="file" id="file0" name="uploadfile" size="50" onchange="isvalidatefile(this);" /> </td> </tr> <tr id="filetr" style="display: none;"> <td> <input type="file" size="50" name="uploadfile" onchange="isvalidatefile(this);" /> <input type="button" value="删除" /> </td> </tr> <tr id="op"> <td> <input type="submit" id="uploadbutton" value="上传" /> <input type="button" value="添加" id="addbutton" onclick="addfilecomponent();" /> </td> </tr> </table> </s:form> <table class="pn-ltable" width="100%" cellspacing="1" cellpadding="0" border="0"> <thead class="pn-lthead"> <tr> <th> 序号 </th> <th> 文件名 </th> <th> 上传时间 </th> </tr> </thead> <tbody class="pn-ltbody"> <tr onmouseover="pn.ltable.lineover(this);" onmouseout="pn.ltable.lineout(this);" onclick="pn.ltable.lineselect(this);"> <td> </td> <td> </td> <td> </td> </tr> </tbody> </table> </div> </body> </html>
2、action后台处理上传文件:
//uploadfile对应页面<input type="file" name="uploadfile"> private list<file> uploadfile; //文件名对应uploadfile+“filename”,要不获取不到文件名 private list<string> uploadfilefilename; // 文件上传 public string muploadfile() { if (null == uploadfile) { this.addactionerror("请上传文件!"); } else { string filename = ""; try { //在自己代码中控制文件上传的服务器目录 string directory = servletactioncontext.getservletcontext().getrealpath("/uploads"); //判断该目录是否存在,不存在则创建 fileutil.makedir(directory); //循环处理上传的文件 for(int i=0,j=uploadfile.size();i<j;i++){ filename = uploadfilefilename.get(i); string filepath = directory + file.separator + filename; fileutil.uploadfile(uploadfile.get(i), new file(filepath)); } } catch (ioexception e) { this.addactionmessage(""); } this.addactionmessage("文件上传成功!"); } return "fileupload"; }
fileutil代码如下:
public class fileutil { private static final int buffer_size = 16 * 1024; public static void uploadfile(file src, file dst) throws ioexception { inputstream in = null; outputstream out = null; try { in = new bufferedinputstream(new fileinputstream(src), buffer_size); out = new bufferedoutputstream(new fileoutputstream(dst), buffer_size); byte[] buffer = new byte[buffer_size]; while (in.read(buffer) > 0) { out.write(buffer); } } finally { if (null != in) { in.close(); } if (null != out) { out.close(); } } } public static string getextention(string filename) { int pos = filename.lastindexof("."); return filename.substring(pos); } public static void makedir(string directory) { file dir = new file(directory); if (!dir.isdirectory()) { dir.mkdirs(); } } public static string generatefilename(string filename) throws unsupportedencodingexception { dateformat format = new simpledateformat("yymmddhhmmss"); string formatdate = format.format(new date()); string extension = filename.substring(filename.lastindexof(".")); filename = new string(filename.getbytes("iso8859-1"), "gb2312"); return filename + "_" + formatdate + new random().nextint(10000) + extension; } }
扩展:
1.可以实现带进度条的上传与下载;
2.可以用xml文件记录上传的文件清单,并且可以根据页面对上传文件的操作来修改相应的xml文件;
完毕!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。