设为首页 收藏本站
查看: 1387|回复: 0

[经验分享] FTP+SpringMVC+Uploadify实现带进度条多文件上传

[复制链接]

尚未签到

发表于 2015-11-6 11:19:14 | 显示全部楼层 |阅读模式
  由于长期做接口,从来都是研究数据库、字段、增删改。文件的上传下载有些接触,但是都是完全封装后的一个调用,很少接触那么深刻。那么,问题来了。之前忽然接到一个网站,其实很简单,就包括上传、下载、分页。但是一下就感觉晕了。首先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;> -->
<!--     <input  type=&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
private  UploadService 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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-135834-1-1.html 上篇帖子: busybox自带的FTP服务器 下篇帖子: 上传文件到指定的FTP服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表