作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服

项目环境概述

Eclipse:

版本: eclipse-mars

下载地址:  https://pan.baidu.com/s/1ci4Nim

Tomcat:

版本: apache-tomcat-7.0.59

下载地址:  https://pan.baidu.com/s/1eS6JlrO

Maven:

版本: apache-maven-3.0.2

下载地址:  https://pan.baidu.com/s/1i4Ud35F

JDK:

版本: JDK1.7

下载地址: https://pan.baidu.com/s/1jHWJSdK


1. 项目准备

项目运行前准备: 本项目为maven工程, 工程所有依赖的jar包需要根据pom.xml进行下载

没有使用过maven工程的小伙伴请阅读下 【eclipse如何导入和配置maven工程】,看完之后,你就可以将项目跑起来了

huploadify插件版本为h5版本,可通用所有浏览器



2. 项目介绍

   本文为Web项目,代码管理使用maven, 后台使用spring,springmvc框架, 前台使用jQuery uploaddify框架,下面直接介绍如何    使用huploadify上传一个或者多个文件

    2.1 首先需要下载huploadify, 它的文件框架如下图所示

             blob.png

      2.2 新建一个upload.jsp文件

          2.2.1 文件中需要引入 jquery.min.js, Huploadify.css, jquery.Huploadify.js

<!-- 引入css -->
<link rel="stylesheet" type="text/css" href="<%=contextPath%>/jsLib/huploadify/Huploadify.css">
<!--引入Jquery-->
<script type="text/javascript" src="<%=contextPath%>/jsLib/jquery/jquery.min.js"></script>
<!--引入uploadify-->
<script type="text/javascript" src="<%=contextPath%>/jsLib/huploadify/jquery.Huploadify.js"></script>

          

        2.2.2 给upload.jsp添加页面元素

<body>
	<table id="uploadTable" border="1px"  bordercolor="blue" >
		<tr><td>上传文件名称</td><td>后台存储文件路径</td><td>文件下载链接</td></tr>
	</table>
	<br>
	<form id="formUpFile" runat="server" enctype="multipart/form-data">
		<div>
			<!-- <div id="upload_file"></div> -->
			<div id="upload" />
		</div>
	</form>
</body>

        2.2.3 下面是使用huploadify处理上传文件的核心

              这个控件有很多参数控制,以及事件的处理响应,相对来说比较好用。参数控制可以控制上传文件多选、文件类            型、文件大小、文件数量、检查文件是否存在,以及一些按钮参数的控制,如文字、高度、宽度等,对提交文件成功与            否、完成操作、取消、停止上传等等都有控制。


               onUploadSuccess: huploadify在处理多文件上传时,是一个一个处理的,

                                              每个文件上传成功或者失败后都会执行此函数

               uploader :             <%=contextPath%>/upload/uploadFile.htm    后台上传文件接口

               fileSizeLimit:          30MB   上传文件大小控制

          fileTypeExts:    上传文件类型,  *.*(任何类型)    *.zip;*.rar;*.7z

          multi:           是否支持多文件上传

               removeCompleted: 上传成功之后是否移除上传文件列表         

<script type="text/javascript">  
	$(function () {
		var up = $('#upload').Huploadify({
			'queueID': 'fileQueue',           //队列的ID
			'queueSizeLimit': 1,             //队列最多可上传文件数量,默认为999
			'auto': false,                    //选择文件后是否自动上传,默认为true
			'multi': true,                    //是否为多选,默认为true
			'removeCompleted': false,          //是否完成后移除序列,默认为true
			'fileSizeLimit': 30720,             //单个文件大小,0为无限制,
			                                    //可接受KB,MB,GB等单位的字符串值
			'fileTypeDesc': 'All Files',      //文件描述    
			'fileTypeExts': '*.*',            //上传的文件后缀过滤器  
			'uploader': '<%=contextPath%>/upload/uploadFile.htm',    //后台对应的上传功能
			buttonClass: "some-class",  //设置上传按钮的class 
			buttonCursor: 'hand', //设置鼠标移到按钮上的开状,接受两个值'hand'和'arrow'(手形和箭头) 
			onUploadStart:function(file){
				console.log(file.name+'开始上传');
			},
			onInit:function(obj){
				console.log('初始化');
				console.log(obj);
			},
			onUploadComplete:function(file){
				console.log(file.name+'上传完成');
			},
			onCancel:function(file){
				console.log(file.name+'删除成功');
			},
			onClearQueue:function(queueItemCount){
				console.log('有'+queueItemCount+'个文件被删除了');
			},
			onDestroy:function(){
				console.log('destroyed!');
			},
			onSelect:function(file){
				console.log(file.name+'加入上传队列');
			},
			onQueueComplete:function(queueData){
				console.log('队列中的文件全部上传完成',queueData);
			},
			onUploadSuccess: function (file, data, response) {
				var data = $.parseJSON(data);//如果data是json格式   
				if(data.stateCode == '0'){
					var fileName = data.data.fileName;
					var filePath = data.data.filePath;
					var fileLink = data.data.fileLink;
					
					var fileInfo = "<tr>" + 
					                      "<td>" + fileName + "</td>" + 
					                      "<td>" + filePath + "</td>" +
					                      "<td><a href='" + fileLink + "' target='_blank'>下载</                                                                    a>" + "</td>" +
					                "<tr>";
					$('#uploadTable').append(fileInfo);
				}else{
					alert('上传失败');
				}
			}
		});
		
		
		/* $('#btnUpload').click(function(){
			up.upload('*');
		});
		$('#btnCancelUpload').click(function(){
			up.cancel('*');
		}); */  
	});   
	
	//执行上传  
	function doUpload() {
		$('#file_upload').uploadify('upload', '*'); 
	}
</script>


       2.3 后台上传文件代码

           后台使用MultipartFile来对文件进行处理, 其对应函数 getOriginalFilename 获得上传文件名称

           getSize 获得上传文件大小;

           代码在项目根路径下面新建了文件夹 tmp, 上传的文件全部放在tmp目录下,代码对上传文件名称进行名称替换,

           使用FolderUtil.getUUID() 生成相应的名称 

       

package com.main.controller;

import java.io.File;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.alibaba.fastjson.JSONObject;
import com.main.model.FileInfo;
import com.main.util.Constant;
import com.main.util.FolderUtil;
import com.main.util.Result;

@Controller
@RequestMapping("/upload")
public class UploadController {
	
	
	public UploadController() {
		System.out.println("MainController构造函数");
	}
	
	@RequestMapping("/getUploadPage.htm")
	public String getUploadPage(HttpServletRequest request){
		return "upload";
	}
	
	//访问此资源的url:  http://localhost:8080/UploadFile/upload/uploadFile.htm
	@RequestMapping("/uploadFile.htm")
	@ResponseBody
    public Result uploadFile(HttpServletRequest request) 
    {
		Result result = new Result();
		JSONObject json_out = new JSONObject();
		
		result.setStateCode(Constant.RESULT_FAILURE);
		String strMsg = "";
		
    	        CommonsMultipartResolver multipartResolver  = new CommonsMultipartResolver(request.getSession()
    	                                     .getServletContext());
    	
    	if(multipartResolver.isMultipart(request)){
    		MultipartHttpServletRequest  multiRequest = (MultipartHttpServletRequest)request;
			Iterator<String>  iter = multiRequest.getFileNames();
			
			try{
				MultipartFile file = multiRequest.getFile((String)iter.next());
				//文件不能超过30M
				if(file.getSize() <= 31457280){
					System.out.println(file.getSize());
					
					//这里面名字是这个标签中的名字 <input type="file" name="orgcodeImg" 
					//onchange="return chageOrgImg();"></input>
					String fileFlag = file.getName();
					
					// 获得文件类型(可以判断如果不是指定类型,禁止上传) image/jpeg
					// && contentType.contains("image")
	                                String contentType = file.getContentType();
					if(file != null){
						FileInfo fileInfo = new FileInfo();
						
						String fileName =  file.getOriginalFilename();
						fileInfo.setFileName(fileName);
						String suffix = fileName.substring(fileName.lastIndexOf("."));
						
						String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
						
						String path = request.getSession().getServletContext()
						    .getRealPath("") + File.separator + "tmp";

						File fileHeadImg = new File(path);
						FolderUtil.mkDir(fileHeadImg);
						
						//将上传文件保存到本地
						String picNewName = FolderUtil.getUUID() 
						+ fileName.substring(fileName.lastIndexOf("."), fileName.length());; 
						String outputpath = path + File.separator + picNewName;
						fileInfo.setFilePath(outputpath);
						fileInfo.setFileLink(request.getContextPath() + File.separator 
						       + "tmp" + File.separator + picNewName);
						File localFile = new File(outputpath);					
						file.transferTo(localFile);
						
						result.setStateCode(Constant.RESULT_SUCCESS);
						result.setDesc("上传文件成功");
						result.setData(fileInfo);
							
					}else{
						result.setStateCode(Constant.RESULT_FAILURE);
						result.setDesc("不是文件");
					}
				}
			}catch(Exception e){
				result.setStateCode(Constant.RESULT_FAILURE);
				result.setDesc("上传文件异常");
				e.printStackTrace();
			}
    	}
		return  result;
    }
	
	//测试函数
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub
	}

}


3 项目运行

  3.1 启动项目,在地址栏中输入: http://localhost:8080/UploadFile/upload/getUploadPage.htm

      blob.png

      

  3.2 点击【Browse】,选择需要上传的文件, 如下图,选择相应的三个文件, 点击【上传】按钮

      blob.png

    3.3  上传成功后,将上传成功的文件显示在列表中, 点击列表中的【下载】,可以下载上传成功的文件

       blob.png




Home