上传下载后台函数以及前端脚本(webuploader) 备份
1 import java.io.BufferedOutputStream; 2 import java.io.IOException; 3 import java.io.InputStream; 4 import java.io.PrintWriter; 5 import java.io.UnsupportedEncodingException; 6 import java.net.URLEncoder; 7 import java.util.HashMap; 8 import java.util.List; 9 import java.util.Map; 10 import java.util.zip.ZipEntry; 11 import java.util.zip.ZipOutputStream; 12 13 import javax.mail.internet.MimeUtility; 14 import javax.servlet.ServletOutputStream; 15 import javax.servlet.http.HttpServletRequest; 16 import javax.servlet.http.HttpServletResponse; 17 18 import org.springframework.beans.factory.annotation.Autowired; 19 import org.springframework.stereotype.Controller; 20 import org.springframework.ui.Model; 21 import org.springframework.web.bind.annotation.RequestMapping; 22 import org.springframework.web.bind.annotation.RequestParam; 23 import org.springframework.web.bind.annotation.ResponseBody; 24 import org.springframework.web.multipart.MultipartFile; 25 26 27 28 @Controller 29 @RequestMapping("/commonUpload") 30 public class CommonUploadContorller{ 31 32 @Autowired 33 private CommonService centerCommonService; 34 35 /** 36 * 添加资料页 37 * 38 * @return 39 * @author guogf 40 */ 41 @RequestMapping("/toUploadAttachment") 42 public String toUploadAttachment(String blongId,String fileSource,Model model) { 43 Map<String, Object> objMap = new HashMap<String, Object>(); 44 objMap.put("belongId", blongId); 45 objMap.put("fileSource", fileSource); 46 model.addAttribute("objMap", objMap); 47 return "commonUpload/uploadAttachment"; 48 } 49 50 @RequestMapping("/fileUpLoad") 51 public String fileUpLoad(HttpServletRequest request,HttpServletResponse response,long belongId 52 ,@RequestParam(defaultValue = "100") String fileSource, @RequestParam(value="file",required=false)MultipartFile file) { 53 User currentUser = UserUtils.getUser(); 54 String attachmentId = centerCommonService.uploadAttachment(belongId,fileSource, file, currentUser); 55 if(!"uploadError".equals(attachmentId)){ 56 try { 57 response.reset(); 58 PrintWriter out = response.getWriter(); 59 out.print("{\"attachmentId\" :"+ attachmentId+"}"); 60 out.flush(); 61 out.close(); 62 } catch (IOException e) { 63 // TODO Auto-generated catch block 64 e.printStackTrace(); 65 } 66 return null; 67 }else{ 68 return null; 69 } 70 } 71 72 /** 73 * 资料附件下载 74 * @param files 75 * @return 76 * @author guogf 77 */ 78 @RequestMapping("/downLoadAttachment") 79 @ResponseBody 80 public void downLoadAttachment(HttpServletRequest request,String attachId,HttpServletResponse response){ 81 FTPUtils ftpUtils = FTPUtils.getInstance(); 82 InputStream is = null; 83 ServletOutputStream out; 84 byte[] content = new byte[1024]; 85 String fileName = ""; 86 List<Attachment> attachList = centerCommonService.findAttList(attachId.split(",")); 87 if(attachList!=null && attachList.size()>1){//批量下载多个文件,先压缩,再下载 88 try { 89 response.addHeader("Content-Disposition", "attachment; filename="+IdGen.getRandomName(6)+DateUtils.getNumberDateTime()+".zip"); 90 ServletOutputStream sos=response.getOutputStream(); 91 ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(sos)); 92 int readLen = -1; 93 for(Attachment att : attachList){ 94 ZipEntry entry = new ZipEntry(att.getFilePath()); 95 zipOut.putNextEntry(entry); 96 is = ftpUtils.retrieveFile(att.getFilePath().substring(0, att.getFilePath().lastIndexOf("/")) 97 ,att.getFilePath().split("/")[att.getFilePath().split("/").length-1]); 98 if(is!=null){ 99 while ((readLen = is.read(content, 0, 1024)) != -1) { 100 zipOut.write(content, 0, readLen); 101 } 102 is.close(); 103 } 104 } 105 zipOut.close(); 106 } catch (Exception e) { 107 e.printStackTrace(); 108 } 109 }else if(attachList!=null && attachList.size()==1){//下载单个文件,直接下载 110 Attachment att = attachList.get(0); 111 fileName = att.getFileName(); 112 try { 113 response.setHeader("Content-Type", "application/octet-stream"); 114 response.setHeader("X-Accel-Charset", "UTF-8"); 115 response.setHeader("Content-Disposition", "attachment;" + encode(request, fileName)); 116 is = ftpUtils.retrieveFile(att.getFilePath().substring(0, att.getFilePath().lastIndexOf("/")) 117 ,att.getFilePath().split("/")[att.getFilePath().split("/").length-1]); 118 out = response.getOutputStream(); 119 int length = 0; 120 while ((length = is.read(content)) != -1) { 121 out.write(content, 0, length); 122 } 123 out.write(content); 124 out.flush(); 125 out.close(); 126 } catch (Exception e) { 127 // TODO Auto-generated catch block 128 e.printStackTrace(); 129 } 130 } 131 } 132 133 // IE与firefox下载区分 134 private String encode(HttpServletRequest request, String realfileName) { 135 String agent = request.getHeader("USER-AGENT").toLowerCase(); 136 try { 137 String new_filename = URLEncoder.encode(realfileName, "UTF8"); 138 // IE 139 if (null != agent && -1 != agent.indexOf("msie")) { 140 realfileName = URLEncoder.encode(realfileName, "UTF8") 141 .replaceAll("\\+", "%20"); 142 realfileName ="filename="+ new String(realfileName.getBytes("GBK"), 143 "iso-8859-1"); 144 // Firefox 145 } 146 // Opera浏览器只能采用filename* 147 else if (null != agent && agent.indexOf("opera") != -1) 148 { 149 realfileName = "filename*=UTF-8''" + new_filename; 150 } 151 // Safari浏览器,只能采用ISO编码的中文输出 152 else if (null != agent && agent.indexOf("safari") != -1 ) 153 { 154 realfileName = "filename=\"" + new String(realfileName.getBytes("UTF-8"),"ISO8859-1") + "\""; 155 } 156 // Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出 157 else if (null != agent && agent.indexOf("applewebkit") != -1 ) 158 { 159 new_filename = MimeUtility.encodeText(realfileName, "UTF8", "B"); 160 realfileName = "filename=\"" + new_filename + "\""; 161 } 162 // FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出 163 else if (null != agent && -1 != agent.indexOf("mozilla")) { 164 // realfileName = MimeUtility 165 // .encodeText(realfileName, "UTF8", "B"); 166 // realfileName = "filename=?UTF-8?B?" + (new String(Encodes.encodeBase64(realfileName.getBytes("UTF-8")))) + "?="; 167 realfileName = "filename*=UTF-8''" + new_filename; 168 } 169 } catch (UnsupportedEncodingException e) { 170 try { 171 realfileName = new String(realfileName.getBytes("UTF-8"), 172 "iso-8859-1"); 173 } catch (UnsupportedEncodingException e1) { 174 e1.printStackTrace(); 175 } 176 e.printStackTrace(); 177 } 178 return realfileName; 179 } 180 }
var uploader; $(function(){ //下面是文件上传的js操作 var $ = jQuery, $list = $('#thelist'), $btn = $('#ctlBtn'), state = 'pending', uploader = WebUploader.create({ // 不压缩image resize: false, // swf文件路径 swf: ctxStatic+'/WebUploader/Uploader.swf', // 文件接收服务端。 server: ctx+'/commonUpload/fileUpLoad', // 选择文件的按钮。可选。 // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick:{ id:'#picker', multiple :true }, formData: { belongId:$('#belongId').val(), fileSource:$('#fileSource').val() } }); // 当有文件添加进来的时候 uploader.on( 'fileQueued', function( file ) { $list.append( '<div id="' + file.id + '" class="item">' + '<h4 class="info">' + file.name + '<a id="delete_' + file.id + '" class="file_close" title="删除" href="javascript:void(0);" fileId="" />'+'</h4>' + '<p class="state">等待上传...</p>' + '</div>' ); $('#delete_'+ file.id).on('click', function() { if($(this).attr("fileId")!=''){ var attachmentIds = $("#attachmentIds").val(); var arrList = attachmentIds.split(','); arrList.splice($.inArray($(this).attr("fileId"),arrList),1); $("#attachmentIds").val(arrList.join(',')); } $('#'+file.id).remove(); uploader.removeFile( file ); }); }); // 文件上传过程中创建进度条实时显示。 uploader.on( 'uploadProgress', function( file, percentage ) { var $li = $( '#'+file.id ), $percent = $li.find('.progress .progress-bar'); // 避免重复创建 if ( !$percent.length ) { $percent = $('<div class="progress progress-striped active">' + '<div class="progress-bar" role="progressbar" style="width: 0%">' + '</div>' + '</div>').appendTo( $li ).find('.progress-bar'); } $li.find('p.state').text('上传中'); $percent.css( 'width', percentage * 100 + '%' ); }); uploader.on( 'uploadSuccess', function( file,response ) { var num = $('#attachmentIds').val(); $('#attachmentIds').val(num+","+response.attachmentId); $( '#'+file.id ).find('p.state').text('已上传'); $('#delete_'+ file.id).attr("fileId",response.attachmentId); }); uploader.on( 'uploadError', function( file,reason ) { $( '#'+file.id ).find('p.state').text('上传出错'); }); uploader.on( 'uploadComplete', function( file ) { $( '#'+file.id ).find('.progress').fadeOut(); }); $btn.on( 'click', function() { if ( state === 'uploading' ) { uploader.stop(); } else { uploader.upload(); } }); uploader.on( 'all', function( type ) { if ( type === 'startUpload' ) { state = 'uploading'; } else if ( type === 'stopUpload' ) { state = 'paused'; } else if ( type === 'uploadFinished' ) { state = 'done'; } if ( state === 'uploading' ) { $btn.text('暂停上传'); } else { $btn.text('开始上传'); } }); }); var deleteFile = function(id){ var attachmentIds = $("#attachmentIds").val(); var arrList = attachmentIds.split(','); arrList.splice($.inArray(id,arrList),1); $("#attachmentIds").val(arrList.join(',')); $('#file_lable_'+id).remove(); };