struts1.2 多文件上传问题,希望可以动态上传多文件。上传的文件格式是.txt 格式的。
有没有详细的例子,还望各位武林高手不吝赐教,先谢过啦!!!!
有没有详细的例子,还望各位武林高手不吝赐教,先谢过啦!!!!
解决方案 »
- spring3.11整合JPA hibernate4.1支持 爆异常 解决问题可另开贴加分
- xwiki系统怎么加插件
- 访问利用jax-ws endpoint发布的webservice端口,该webservice返回数据速度过于缓慢.
- java/jsp/j2ee/ejb/webservice/dwr qq群42503189 功能强大,牛人多,名额有限,从速加入。
- linux 下tomcat6启动不了,报错,请大神指点解决
- 老问题:Cannot find ActionMappings or ActionFormBeans collection
- EJB 3.0 中的OneToMany问题!
- Struts+eclipse开发的WEB应用脱机浏览时TOMCAT发生java.net.unknownhostException
- 请教jxls通过excel模板生成excel文件相关问题
- JAVA怎样调用其他程序?
- 客户端反应延时
- 求助大家了
2、自己写
页面上通过动态的增加删除行来实现多附件上传,增加删除行使用JavaScript实现(addFileRow();)<html:form action="" method="post" enctype="multipart/form-data">
.....
<input type="file" name="file" size="80"/>
<input name="button" type="button" class="button_bg" value='增加附件' onclick="addFileRow();"/>
后台://多附件上传
Hashtable htable = yourForm.getMultipartRequestHandler().getFileElements();
//然后就是遍历这个htable 循环调用单附件上传就可以了
<input type="file" name="file" />
每个的name要不同名字
同时form中指定enctype="multipart/form-data"
<tr>
<td>添加附件:</td>
<td>
<table id="tb"></table><input type="button" name="btnAddFile" value="点击添加附件" onclick="additem('tb')"/>
</td>
</tr> function additem(id){
var row,cell,str;
row = eval("document.all["+'"'+id+'"'+"]").insertRow();
if(row != null ){
cell = row.insertCell();
str="<input type="+'"'+"file"+'"'+" name=uploadFile["+ num +"].file><input type="+'"'+"button"+'"'+" value="+'"'+"删除"+'"'+" onclick='deleteitem(this,"+'"'+"tb"+'"'+");'>"
cell.innerHTML=str;
}
num++;
}
function deleteitem(obj,id){
var rowNum,curRow;
curRow = obj.parentNode.parentNode;
rowNum = eval("document.all."+id).rows.length - 1;
eval("document.all["+'"'+id+'"'+"]").deleteRow(curRow.rowIndex);
}
ActionFrom中这样定义: public class AddContentForm extends ActionForm {
private static final long serialVersionUID = 1L;
private String content;
private String createTime;
private String sender_name;
private String tag;
private String content_id;
private List myFiles;
public AddContentForm(){
myFiles = new ArrayList();
myFiles.add(new UploadFile());
}
// 注意这个方法的定义 不加中间的循环是会出错的
public UploadFile getUploadFile(int index){
int size = myFiles.size();
// System.out.println("size-->>" + size);
// System.out.println("index-->>" + index);
if(index>size-1){
for(int i=0;i<index-size+1;i++){
myFiles.add(new UploadFile());
}
}
return (UploadFile)myFiles.get(index);
}
public List getMyFiles() {
return myFiles;
} public void setMyFiles(List myFiles) {
this.myFiles = myFiles;
} public String getContent_id() {
return content_id;
} public void setContent_id(String content_id) {
this.content_id = content_id;
} public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
return null;
} /**
* Method reset
* @param mapping
* @param request
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
} /**
* Returns the content.
* @return String
*/
public String getContent() {
return content;
} /**
* Set the content.
* @param content The content to set
*/
public void setContent(String content) {
this.content = content;
} /**
* Returns the createTime.
* @return String
*/
public String getCreateTime() {
return createTime;
} /**
* Set the createTime.
* @param createTime The createTime to set
*/
public void setCreateTime(String createTime) {
this.createTime = createTime;
} /**
* Returns the sender_name.
* @return String
*/
public String getSender_name() {
return sender_name;
} /**
* Set the sender_name.
* @param sender_name The sender_name to set
*/
public void setSender_name(String sender_name) {
this.sender_name = sender_name;
} public String getTag() {
return tag;
} public void setTag(String tag) {
this.tag = tag;
}
} public class UploadFile implements Serializable{
private static final long serialVersionUID = 1L;
private FormFile file;
public FormFile getFile() {
// System.out.println("run in uploadFile.getFile()");
return file;
}
public void setFile(FormFile file) {
this.file = file;
}
}Action中这样写: /**
* 上传多个文件
*/
List myFiles = addContentForm.getMyFiles();
// String fileStr = "";
// System.out.println("myFiles.size-->>" + myFiles.size());
for (int i = 0; i < myFiles.size(); i++) {
UploadFile uploadFile = (UploadFile) myFiles.get(i);
FormFile file = uploadFile.getFile();
if (file == null) {
System.out.println("file is null");
} else {
// 能运行到这里,就可以使用单个文件上传的方法进行上传了。循环而已
// System.out.println("文件名-->" + file.getFileName());
// System.out.println("文件大小-->" + file.getFileSize()/1024 + "kb");
// fileStr += "filename-->" + file.getFileName() +"-->" + "file size-->" + file.getFileSize();
//网络输入流,流向服务器
String fileName = file.getFileName(); //文件名,realName
int fileSize = file.getFileSize()/1024; //文件大小
//重新拼接fileName
String ext = Kbsutil.getExtension(fileName);//文件扩展名
String saveName = new Date().getTime() + "." + ext;//在服务器上保存的文件名,saveName
InputStream in = file.getInputStream();
BufferedOutputStream out = null;
//获取工程的相对路径
String path = servlet.getServletConfig().getServletContext().getRealPath("/"); //工程在Tomcat目录
// System.out.println("绝对路径-->" + path);
//输出流,向服务器的硬盘写
out = new BufferedOutputStream(new FileOutputStream(path + "/upload/" + saveName));
byte[] buffer = new byte[512];
while(in.read(buffer) != -1){
out.write(buffer,0,buffer.length);
}
//存入kbs_accessories表
String savePath ="/upload/" + saveName;
// System.out.println("savePath-->" + savePath);
bo.addAcc(savePath,fileName,saveName,fileSize,senderName,sendTime,content_id);
out.close();
System.out.println("文件上传成功!");
}
}