lihu129c 发表于 2015-11-6 11:19:14

FTP+SpringMVC+Uploadify实现带进度条多文件上传

  由于长期做接口,从来都是研究数据库、字段、增删改。文件的上传下载有些接触,但是都是完全封装后的一个调用,很少接触那么深刻。那么,问题来了。之前忽然接到一个网站,其实很简单,就包括上传、下载、分页。但是一下就感觉晕了。首先js长期不接触,手生了,然后就只能慢慢研究了,各种试。经过4天的工作日以及加班终于完成了这个简单又困难的问题。下载和分页的代码之前已经发了,现在是上传的代码
  
  web前端:
  <%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot; pageEncoding=&quot;UTF-8&quot;%>
<%@ include file=&quot;/common/common.jsp&quot;%>
<!DOCTYPE html>
<html>
<head>
    <meta charset=&quot;UTF-8&quot;>
    <title>后台管理</title>
    <link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;${cxt}/css/common.css&quot;/>
    <link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;${cxt}/css/main.css&quot;/>
    <link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;${cxt}/js/jquery.uploadify-v2.1.4/uploadify.css&quot;/>
    <script type=&quot;text/javascript&quot; src=&quot;${cxt}/js/jquery-1.7.1min.js&quot;></script>
    <script type=&quot;text/javascript&quot; src=&quot;${cxt}/js/jquery.uploadify-v2.1.4/jquery.uploadify.min.js&quot;></script>
    <script type=&quot;text/javascript&quot;>
    $(document).ready(
      function() {
      
      var uf_mob=$('#uf_mob').val();
      
      if(uf_mob==null||uf_mob==''){
      
      alert(&quot;会话已超时请您重新登录&quot;);
      location.href=&quot;${cxt}/index.jsp&quot;;
      }
      
      });
   
      
      
    $(document).ready(function () {
         $(&quot;#uploadify&quot;).uploadify({   
         'swf' : '${cxt}/js/jquery.uploadify-v2.1.4/uploadify.swf',//控件flash文件位置                                                                                                         
               //后台处理的请求(也就是action请求路径),后面追加了jsessionid,用来标示使用当前session(默认是打开新的session,会导致存在session校验的请求中产生302错误)      
               'uploader' : '${cxt}/uploadFiles',                                                                                             
   'queueID' : 'fileQueue',//与下面HTML的div.id对应                                                                                                                                 
   'width' : '100',//按钮宽度                                                                                                                                                   
   'height' : '32',//按钮高度                                                                                                                                                   
   'fileTypeDesc' : '*.JPG;*.PNG;*.TXT;*.PDF;*.EXCEL;*.TMP;*.PDF;',                                                                                                                                             
   'fileTypeExts' : '*.jpg;*.png;*.txt;*.pdf;*.excel;*.tmp;*.pdf', //控制可上传文件的扩展名,启用本项时需同时声明fileDesc                                                                                       
   'buttonText' : '批量上传',//上传按钮显示内容,还有个属性可以设置按钮的背景图片                        
   'fileSizeLimit' : '2048KB',                                                                                                                                                   
   'multi' : true,      
   'onFallback' : function() {//检测FLASH失败调用                                                                                                                                 
         alert(&quot;您未安装FLASH控件,无法上传图片!请安装FLASH控件后再试。&quot;);                                                                                                         
   },                                                                                                                                                                           
  });   
   });                                                                                                                     
                                                                                                                           

  
    </script>
    </head>
<body>
<div class=&quot;topbar-wrap white&quot;>
    <div class=&quot;topbar-inner clearfix&quot;>
      <div class=&quot;topbar-logo-wrap clearfix&quot;>
            <h1 class=&quot;topbar-logo&quot;><a href=&quot;index.html&quot; class=&quot;navbar-brand&quot;>资料管理库</a></h1>
      </div>
      <div class=&quot;top-info-wrap&quot;>
            <ul class=&quot;top-info-list clearfix&quot;>
                <li><a href=&quot;${cxt}/index.jsp&quot;>退出</a></li>
            </ul>
      </div>
    </div>
</div>
<div class=&quot;container clearfix&quot;>
    <div class=&quot;sidebar-wrap&quot;>
      <div class=&quot;sidebar-content&quot;>
            <ul class=&quot;sidebar-list&quot;>
                <li>
                  <a href =&quot;${cxt}/mobLogin/getDetailList?uf_mob=${userMap.UF_MOB}&quot;><img class=&quot;icon-font&quot; src=&quot;${cxt}/images/fill.png&quot;/>个人信息</a>
                </li>
                <li>
                  <a href=&quot;${cxt}/mobLogin/getFileList&quot;><img class=&quot;icon-font&quot; src=&quot;${cxt}/images/down.png&quot; />下载资料</a>
                </li>
    <li>
                  <c:if test=&quot;${userMap.GROUPNAME=='培训部'}&quot;>
      <a href=&quot;${cxt}/mobLogin/fileUpload&quot;><img class=&quot;icon-font&quot; src=&quot;${cxt}/images/up.png&quot;/>上传资料</a>
      </c:if>
                </li>
            </ul>
      </div>
    </div>
    <!--/sidebar-->
    <div class=&quot;main-wrap&quot;>
      <div class=&quot;result-wrap&quot; id = &quot;fileQueue&quot;>
            <div class=&quot;result-title&quot;>
                <h1>上传资料</h1>
            </div>
            <input type=&quot;file&quot; multiple = &quot;multiple&quot; name=&quot;uploadify&quot; id=&quot;uploadify&quot; ><br/><br/><br/>
<!--   <div style = &quot;margin-left:100px;&quot;> -->
<!--   <inputtype=&quot;button&quot; onclick = &quot;javascript:$('#uploadify').uploadifyUpload()&quot;value=&quot;上&nbsp;传 &quot;> -->
<!--   </div> -->
      </div>
    </div>
</div>
<input type=&quot;hidden&quot; id=&quot;uf_mob&quot; value=&quot;${userMap.UF_MOB}&quot;/>
</body>
</html>
  
  
  
  
  web后端
  
  package mob.controller;
  import java.util.HashMap;
import java.util.Map;
  import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  import mob.service.UploadService;
import mob.util.CalendarUtil;
import mob.util.Constants;
import mob.util.FTPUtil;
import mob.util.FileUpload;
import mob.util.FileUtil;
  import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
//
//import com.gq.core.utils.FileUpload;
  /**
*
* @ClassName: UploadifyTestController
* @Description: uploadify测试
* @author yangfei.eng@gmail.com
* @date 2014-6-14 下午18:45:02
* @version V1.0
*/
@Controller
public class UploadifyController {

@Autowired
privateUploadService service;

/**
* @Title: uploadFiles
* @Description: 文件上传
* @param request
* @param response
*/
@SuppressWarnings(&quot;unchecked&quot;)
@RequestMapping(&quot;/uploadFiles&quot;)
public void uploadFiles(HttpServletRequest request,HttpServletResponse response) throws Exception {

//转型为MultipartHttpRequest
MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest) request;
//获得文件到map容器
Map<String,MultipartFile> fileMap = multipartRequest.getFileMap();

FTPUtil aFTPUtil= new FTPUtil();
aFTPUtil.connectServer(Constants.DEFAULT_FTP_IP, Constants.DEFAULT_FTP_PORT,
    Constants.DEFAULT_FTP_USER,Constants.DEFAULT_FTP_PASS, Constants.FCK_UPLOAD_PATH);
      for(Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) {
         MultipartFile file = (MultipartFile)entry.getValue();
         if(file.getSize() > 0 ) {
          byte [] bytes = file.getBytes();
          byte [] compactBytes = bytes;
         
          String fullPath = Constants.FCK_UPLOAD_PATH&#43; &quot;/&quot; &#43; file.getOriginalFilename();
          if(fullPath.indexOf(&quot;*.png&quot;)<0 &&fullPath.indexOf(&quot;*.gif&quot;)<0 &&fullPath.indexOf(&quot;*.tmp&quot;)<0)
          {
         FileUpload.upload(fullPath,bytes);
          }else{
         
         String compactUrl = &quot;/compactImage&quot; &#43; FileUtil.getMillisFileName(file.getOriginalFilename());
            FileUpload.upload(compactUrl,compactBytes);
          }
         }
         
         if(request.getSession().getAttribute(&quot;userMap&quot;) != null && !&quot;&quot;.equals(request.getSession().getAttribute(&quot;userMap&quot;))){
          Map map = new HashMap();
             map.put(&quot;id&quot;, CalendarUtil.UUID());
             map.put(&quot;file_name&quot;, file.getOriginalFilename());
             map.put(&quot;file_path&quot;, Constants.FCK_UPLOAD_PATH);
          map.put(&quot;add_person&quot;, ((Map)request.getSession().getAttribute(&quot;userMap&quot;)).get(&quot;UF_MOB&quot;)&#43;&quot;&quot;);
             map.put(&quot;file_describe&quot;, &quot;&quot;);
             map.put(&quot;download_count&quot;, 0);
            
             //数据库中添加一条记录
                this.service.addFileData(map);
         }
         
         
         
      }
}
}

  
  
  
/**
* 文件上传
* @param fullName 上传文件放在服务器上的全路径
* @param dataInputStream 需要上传的byte[]
* @throws Exception
*/
public static void upload(String fullName,byte[] bytes) throws Exception {
String path = fullName.substring(0,fullName.lastIndexOf(&quot;/&quot;));
String name = fullName.substring(fullName.lastIndexOf(&quot;/&quot;)&#43;1);
FTPUtil.getFtpClient(path).uploadFile(new ByteArrayInputStream(bytes), name);
}
  
  /**
   * please see sample code in method main
   *
   * @param dataInputStream
   * @param remoteFileName
   * @throws Exception
   */
    public void uploadFile(InputStream dataInputStream, String remoteFileName)
   throws Exception {
try {
      // need to encode
      remoteFileName = CommonUtil.getString(remoteFileName, CoreConstants.ENCODING_GBK,
       CoreConstants.ENCODING_ISO8859_1);
      boolean rtnResult = ftpClient.storeFile(remoteFileName, dataInputStream);
      if (!rtnResult) {
   throw new Exception(&quot;Fail to upload file to ftp server.&quot;);
      }
} catch (Exception e) {
      log.error(&quot;uploadFile file failed.&quot;, e);
      throw new Exception(e);
} finally {
      try {
   closeServer();
      } catch (Exception e) {
      }
}
    }
         版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: FTP+SpringMVC+Uploadify实现带进度条多文件上传