浏览 5167 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-15
最后修改:2011-03-15
以下代码如果没有耐心千万不要看,很费时的,自己觉得这个实现方式实在是太不给力了。 1.前台表单: <script type="text/javascript"> var t = 1; function addFileInput() { 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> <td id="more"><!-- <html:file property="uploadFile[0].file" /><br/> <html:file property="uploadFile[1].file" /><br/> <html:file property="uploadFile[2].file" /> --> <input type="file" name="uploadFile[0].file" size="30"> <input type="button" onclick="addFileInput();" value="增加"> </td>
2. FileAction.java /** * 文件上传实现1.0 */ public ActionForward addFile(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){ FileForm fileForm = (FileForm)form; List<UploadFile> 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; /** * <p> 描述: 文件上传工具类,每次上传的文件都上传到时upifles目录中,根据年月别保存到 * 相应的目录下,如当年月为2011-3 则文件相应的路径为:/upfiles/2010_3/ * </p> * * <p> 原则: * * 如果是单文件上传,用户界面文件表单为:<html:file property="formFile" /> * 如果是多文件上传,用户界面文件表单为如下格式,其中uploadFile数组大小可以任意,建议不要太大: * <html:file property="uploadFile[0].file" /><br/> <html:file property="uploadFile[1].file" /><br/> <html:file property="uploadFile[2].file" /> * </p> * * <p> 作用: 1.文件名,文件路径,文件大小,文件类型,将文件保存到磁盘(支持多文件上传) * 2.删除磁盘中的文件 * 3.垃圾文件(夹)清理 未实现************************* * 4.断点续传未实,现期待给力哥*********************** * * </p> * * <p> Create Date:2011-3-14 </p> * */ public class FileUploadTool { /** * 保存单个文件后所得到的信息 */ private String fname = ""; private String furl = ""; private String ftype = ""; private float fsize = 0; /** * 保存多个 文件后所得到的信息 */ private List<String> fnames; private List<String> furls; private List<String> ftypes; private List<Float> fsizes; public String getFname() { return fname; } public String getFurl() { return furl; } public String getFtype() { return ftype; } public float getFsize() { return fsize; } public List<String> getFnames() { return fnames; } public List<String> getFurls() { return furls; } public List<String> getFtypes() { return ftypes; } public List<Float> 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<UploadFile> files, String root){ /* * 初始化 */ fnames = new ArrayList<String>(); furls = new ArrayList<String>(); ftypes = new ArrayList<String>(); fsizes = new ArrayList<Float>(); /* * 保存文件 */ 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<Boolean> deleteFile(List<String> furls){ List<Boolean> results = new ArrayList<Boolean>(); for(String furl : furls){ results.add(deleteFile(furl)); } return results; } public void cleanRubbishFiles(){ } }
4. FileForm.java
/** * <p> 描述: 文件DAO</p> * * <p> 原则: * 如果是单文件上传,用户界面文件表单为:<html:file property="formFile" /> * 如果是多文件上传,用户界面文件表单为如下格式,其中uploadFile数组大小可以任意,建议不要太大: * <html:file property="uploadFile[0].file" /><br/> <html:file property="uploadFile[1].file" /><br/> <html:file property="uploadFile[2].file" /> * </p> * * <p> 作用: </p> * * <p> Create Date:2011-3-14 </p> * */ public class FileForm extends ActionForm { private File file = new File(); private List<File> files; private Page page = new Page(1,3); /** * Struts文件表单域 */ private FormFile formFile; /** * 多个文件 * @return */ private List<UploadFile> formFiles = new ArrayList<UploadFile>(); public File getFile() { return file; } public void setFile(File file) { this.file = file; } public List<File> getFiles() { return files; } public void setFiles(List<File> 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<UploadFile> getFormFiles() { return formFiles; } public void setFormFiles(List<UploadFile> 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; /** * <p> 描述: struts1文件上传时的formfile </p> * * <p> 原则: </p> * * <p> 作用: </p> * * <p> Create Date:2011-3-15 </p> * */ public class UploadFile implements Serializable { private FormFile file; public FormFile getFile() { return file; } public void setFile(FormFile file) { this.file = file; } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-03-30
太nb了
这么长 看起来 费神…… |
|
返回顶楼 | |