标签:download 文件上传 文件下载 文件删除 文件大小校验
最近做了一个附件上传下载删除的功能,特地把关键代码记录下来,方便以后复用,也分享给大家!
首先是JSP 代码:
<td class="tdHead33">附件上传:<br/><font color="red"><b>(提示:单个文件上传不得超过10M)</b></font></td> <td id="accessoryFileTd"> <a onclick="addFile()">添加附件</a><br/> <!-- 循环出已经上传的附件 --> <s:iterator value="signFileList" id="file" status="st1"> <div id="accessoryDiv<s:property value="#st1.index"/>" style="padding:3px"> <a onclick="javascript:exportSingle('<s:property value="#file.FILE_URL"/>')" > <s:property value='#file.FILE_NAME'/> </a> <a onclick="deleteFile('accessory','<s:property value="#file.FILE_URL"/>','<s:property value="#st1.index"/>')" class="Edit_Button" href="javaScript:void(0);"> 删除 </a> </div> </s:iterator> </td>
然后是JS代码:
文件上传成功后,保存到数据库中的FILE_URL文件路径是文件路径+文件名称+时间戳,删除和下载都是根据FILE_URL唯一确定的。
var fileNum=1; // 增加附件上传控件 function addFile(){ var str="<div id=\"fileDiv"+fileNum+"\"> "; str+="<input id=\"accessoryFile\" name=\"formBean.accessoryFile\" type=\"file\"/> "; str+=" <a id=\"delete\" onclick=\"deleteFile("+fileNum+")\" style=\"text-decoration:underline\">删除</a>" $("#accessoryFileTd").append(str); fileNum++; } <pre name="code" class="html"> // 删除附件上传控件 function deleteFile(num){ $("#fileDiv"+num).html(""); }
function deleteFile(file,id,num){ mini.confirm("是否确认删除服务器上的文件?", "确定", function (action) { if (action == "ok") { $.post( bootPATH+"/ajax3/uploadFile_deleteFile.action", {"appAttachmentId":id}, function (data, textStatus){ if (data.result=="success") { $("#accessoryDiv"+num).html(""); mini.alert("删除成功!"); } else { mini.alert("操作失败!"); return; } }, "json"); } } ); }这是下载附件的JS ,其中appAttachmentId为附件路径
function exportSingle(appAttachmentId){ var url = bootPATH+"/inner/uploadFile_downLoadFile.action?appAttachmentId="+appAttachmentId; $("#actionForm").attr("action",url).submit(); }
然后是JAVA代码:
要想将附件上传到服务器,首先得建立一个存放附件的文件夹:
public final static String FILE_PATH = "Upload";
private void uploadingFileInnerSignInfo(Map map) throws Exception { String personId = map.get("personId").toString(); String pactId = map.get("pactId").toString(); if(""!=map.get("accessoryFileFileName") && null!=map.get("accessoryFileFileName") && ""!=map.get("accessoryFile") && null!=map.get("accessoryFile")) { String accessoryFileFileName = map.get("accessoryFileFileName").toString(); String accessoryFile = map.get("accessoryFile").toString(); String[] files = accessoryFile.split(","); String[] fileNames = accessoryFileFileName.split(","); for (int i = 0; i < files.length; i++) { FileParam param = new FileParam(); String fileUrl = CommonConstant.FILE_PATH + "/" + fileNames[i] + DateTool.getCurrrentDate2(); param.setPactId(pactId); param.setFileName(fileNames[i]); param.setCreatedBy(personId); param.setLastUpdateBy(personId); param.setCreationDate(DateTool.getCurrrentDate1()); param.setLastUpdatedDate(DateTool.getCurrrentDate1()); uploadingFile(files[i], CommonConstant.FILE_PATH, fileNames[i], param); } } }
/** * 上传文件方法 * @return */ public boolean uploadingFile(String files, String folderName, String paramFileName, FileParam fileParam) throws Exception { if (files == null || paramFileName == null) { return false; } String currentDateStr = DateTool.getCurrrentDate2(); String name = FileUtil.getFileName(paramFileName) + "_" + currentDateStr + "." + FileUtil.getExtentionName(paramFileName); FileOutputStream fos = null; FileInputStream fis = null; try { String folderPath = this.getServerFilePath(folderName); File folderFile = new File(folderPath); if (!folderFile.exists()) { folderFile.mkdir(); } fis = new FileInputStream(files); fos = new FileOutputStream(folderPath + "\\" + name); byte[] buffer = new byte[102400]; int len = 0; while ((len = fis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fileParam.setFileUrl(folderName + "/" + name); String sql = "INSERT INTO pact_baseinfo_inner_signfile (pact_id,file_name,file_url,creation_date,created_by,last_update_date,last_updated_by) " ; sql += "values ('"+ fileParam.getPactId()+"','"+fileParam.getFileName()+"','"+fileParam.getFileUrl()+"',sysdate,'" +fileParam.getCreatedBy()+"',sysdate,'"+fileParam.getLastUpdateBy()+"')"; pactBaseinfoInnerSignDao.executeSQL(sql); } catch (Exception e) { //e.printStackTrace(); return false; } finally { close(fos, fis); } return true; } /** * 关闭文件流等对象 * * @param fos * @param fis */ private void close(FileOutputStream fos, FileInputStream fis) { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 得到上传文件的详细路径 * @return */ public String getServerFilePath(String folderName) { String basePath = ServletActionContext.getRequest() .getSession() .getServletContext() .getRealPath(""); return basePath + "\\" + folderName; }
删除和下载的关键代码
public class UploadFileAction { private UploadFileService uploadFileService; private String fileName; private InputStream inputStream; private String appAttachmentId; private String realPath = ServletActionContext.getServletContext().getRealPath("/"); private Map resultMap=new HashMap(); public String downLoadFile() { try { Map fp = uploadFileService.queryFileRecordInDB(appAttachmentId); //下载前先判断数据库中是否存在这个文件 if(null != fp) { fileName = (String) fp.get("FILE_NAME"); String path = realPath + fp.get("FILE_URL"); //路径传到前台时路径中的“\”会被认为是转义符,所以保存时保存的“/”,这是作为参数传到后台需要重新替换下。 path = path.replaceAll("/", "\\\\"); inputStream = new FileInputStream(path); } } catch (Exception e) { e.printStackTrace(); } return "downLoad"; //如果dir是绝对路径 } public String deleteFile() { try { Map fp = uploadFileService.queryFileRecordInDB(appAttachmentId); <pre name="code" class="html"> //下载前先判断数据库中是否存在这个文件if (null != fp){String path =(String) fp.get("FILE_URL");
@Override public boolean isOverSize(File file, int size) { if (file == null || !file.exists()) { return false; } FileInputStream fis = null; try { double fileSize = file.length()/1000000.0; if (fileSize <= size) { return false; } else { return true; } } catch (Exception e) { e.printStackTrace(); return false; } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } }
标签:download 文件上传 文件下载 文件删除 文件大小校验
原文地址:http://blog.csdn.net/yuzongtao/article/details/42213801