struts1.x实现多文件上传1.0(笔记)

阅读更多
以下代码如果没有耐心千万不要看,很费时的,自己觉得这个实现方式实在是太不给力了。
1.前台表单:
 




				
				
			

  

 2. FileAction.java

	/**
	 * 文件上传实现1.0
	 */
	public ActionForward addFile(ActionMapping mapping, ActionForm form, 
			HttpServletRequest request, HttpServletResponse response){
		FileForm fileForm = (FileForm)form;
		List uploadFiles =  fileForm.getFormFiles();
		// result = 0;
		if(uploadFiles != null){
			String root=request.getSession(true).getServletContext().getRealPath("/heyjdemo/upfiles/"); 
			FileUploadTool fileUploadTool = new FileUploadTool();
			fileUploadTool.saveFile(uploadFiles, root);
			
			/*
			 *将文件信息保存到数据
			 */
			
		}
		

		return mapping.findForward("success"); 
	}

 

 

 

3. FileUploadTool.java

 

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.struts.upload.FormFile;

/**
 * 

描述: 文件上传工具类,每次上传的文件都上传到时upifles目录中,根据年月别保存到 * 相应的目录下,如当年月为2011-3 则文件相应的路径为:/upfiles/2010_3/ *

* *

原则: * * 如果是单文件上传,用户界面文件表单为: * 如果是多文件上传,用户界面文件表单为如下格式,其中uploadFile数组大小可以任意,建议不要太大: *

*

* *

作用: 1.文件名,文件路径,文件大小,文件类型,将文件保存到磁盘(支持多文件上传) * 2.删除磁盘中的文件 * 3.垃圾文件(夹)清理 未实现************************* * 4.断点续传未实,现期待给力哥*********************** * *

* *

Create Date:2011-3-14

* */ public class FileUploadTool { /** * 保存单个文件后所得到的信息 */ private String fname = ""; private String furl = ""; private String ftype = ""; private float fsize = 0; /** * 保存多个 文件后所得到的信息 */ private List fnames; private List furls; private List ftypes; private List fsizes; public String getFname() { return fname; } public String getFurl() { return furl; } public String getFtype() { return ftype; } public float getFsize() { return fsize; } public List getFnames() { return fnames; } public List getFurls() { return furls; } public List getFtypes() { return ftypes; } public List getFsizes() { return fsizes; } /** * 获得唯一的字符串前缀 * 使用日期+随机数 * @return */ public String getUniqueString(){ Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currrentDateStr = simpleDateFormat.format(date); int randInt = (int)( Math.random()*10000); String uniqueStr = (currrentDateStr + randInt).replaceAll(" ", "") .replaceAll(":", "").replaceAll("-", ""); return uniqueStr; } /** * 保存单个文件, * 当返回为1时,保存文件成功,当返回为0时,保存不成功 * @param file * @param preFurl * @param preFname * @return */ public int saveFile(FormFile file, String root, String preFname){ //保存文件 try{ fsize = file.getFileSize(); /** * 当文件大小为0时不上传此文件 */ if(0 == fsize){ return 0; } String[] tempStr = preFname.split("\\."); if(tempStr.length>0){ ftype = tempStr[tempStr.length - 1 ]; } fname = getUniqueString(); furl = root + "\\" + fname; if(!"".equals(ftype)){ furl += "." + ftype; } InputStream in = file.getInputStream(); System.out.println(furl); OutputStream out = new FileOutputStream(furl); int read = 0; //fsize = 0; byte[] buffer = new byte[1024]; while((read = in.read(buffer,0,1024)) != -1){ out.write(buffer, 0, read); // fsize += read; } in.close(); out.close(); }catch(Exception e){ e.printStackTrace(); return 0; } ///fsize /= 1024;//转换成kb return 1; } /** * 保存多个文件 * 利用保存单个文件的功能模块来实现多文件保存 * @param files * @param url */ public void saveFile(List files, String root){ /* * 初始化 */ fnames = new ArrayList(); furls = new ArrayList(); ftypes = new ArrayList(); fsizes = new ArrayList(); /* * 保存文件 */ for(UploadFile file : files){ FormFile formFile = file.getFile(); if(formFile == null){ continue; } saveFile(formFile,root,formFile.getFileName()); fnames.add(fname); furls.add(furl); ftypes.add(ftype); fsizes.add(fsize); } } /** * 删除单个文件 * @param furl */ public boolean deleteFile(String furl){ java.io.File file = new java.io.File(furl); if(file.exists()){ file.delete(); return true; }else{ return false; } } /** * 删除多个文件 * @param furls */ public List deleteFile(List furls){ List results = new ArrayList(); for(String furl : furls){ results.add(deleteFile(furl)); } return results; } public void cleanRubbishFiles(){ } }

 

 

4. FileForm.java

 

/**
 * 

描述: 文件DAO

* *

原则: * 如果是单文件上传,用户界面文件表单为: * 如果是多文件上传,用户界面文件表单为如下格式,其中uploadFile数组大小可以任意,建议不要太大: *

*

* *

作用:

* *

Create Date:2011-3-14

* */ public class FileForm extends ActionForm { private File file = new File(); private List files; private Page page = new Page(1,3); /** * Struts文件表单域 */ private FormFile formFile; /** * 多个文件 * @return */ private List formFiles = new ArrayList(); public File getFile() { return file; } public void setFile(File file) { this.file = file; } public List getFiles() { return files; } public void setFiles(List files) { this.files = files; } public Page getPage() { return page; } public void setPage(Page page) { this.page = page; } public FormFile getFormFile() { return formFile; } public void setFormFile(FormFile formFile) { this.formFile = formFile; } public List getFormFiles() { return formFiles; } public void setFormFiles(List formFiles) { this.formFiles = formFiles; } public FileForm(){ } /** * 注意这个方法的定义 不加中间的循环是会出错的, * struts1多文件上传时,是数组 ----》list的过程,不能类型转换 * @param index * @return */ public UploadFile getUploadFile(int index) { int size = formFiles.size(); if (index > size - 1) { for (int i = 0; i < index - size + 1; i++) { formFiles.add(new UploadFile()); } } return (UploadFile) formFiles.get(index); } }

 

 

5.UploadFile.java

import java.io.Serializable;

import org.apache.struts.upload.FormFile;

/**
 * 

描述: struts1文件上传时的formfile

* *

原则:

* *

作用:

* *

Create Date:2011-3-15

* */ public class UploadFile implements Serializable { private FormFile file; public FormFile getFile() { return file; } public void setFile(FormFile file) { this.file = file; } }

 

 

 

你可能感兴趣的:(Struts,HTML,Apache,JavaScript,DAO)