Jquery Uploadify多文件上传带进度条且传递自己的参数示例

11 篇文章 0 订阅
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UpLoad.aspx.cs" Inherits="UploadifyDemo_UpLoad" %>  
  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head id="Head1" runat="server">  
    <title>Jquery Uploadify上传带进度条,且多参数</title>  
    <link href="js/jquery.uploadify-v2.1.4/uploadify.css" rel="stylesheet" type="text/css" />  
    <script type="text/javascript" src="js/jquery.uploadify-v2.1.4/jquery-1.4.2.min.js"></script>  
    <script type="text/javascript" src="js/jquery.uploadify-v2.1.4/swfobject.js"></script>  
    <script type="text/javascript" src="js/jquery.uploadify-v2.1.4/jquery.uploadify.v2.1.4.min.js"></script>  
    <script type="text/javascript">  
        $(document).ready(function () {  
            $("#uploadify").uploadify({  
                'uploader': 'js/jquery.uploadify-v2.1.4/uploadify.swf', //uploadify.swf文件的路径  
                'script': 'UploadHandler.ashx', //处理文件上传的后台脚本的路径  
                'cancelImg': 'js/jquery.uploadify-v2.1.4/cancel.png',  
                'folder': 'UploadFile/<% = DateTime.Now.ToString("yyyyMMdd") %>', //上传文件夹的路径按20130416  
                'queueID': 'fileQueue', //页面中,你想要用来作为文件队列的元素的id  
                'auto': false, //当文件被添加到队列时,自动上传  
                'multi': true, //设置为true将允许多文件上传  
                'fileExt': '*.jpg;*.gif;*.png', //允许上传的文件后缀  
                'fileDesc': 'Web Image Files (.JPG, .GIF, .PNG)', //在浏览窗口底部的文件类型下拉菜单中显示的文本  
                'sizeLimit': 102400,  //上传文件的大小限制,单位为字节 100k  
                'onAllComplete': function (event, data) { //当上传队列中的所有文件都完成上传时触发  
                    alert(data.filesUploaded + ' 个文件上传成功!');  
                }  
            });  
        });  
  
        function uploadpara() {  
            //自定义传递参数  
            $('#uploadify').uploadifySettings('scriptData', { 'name': $('#txtName').val(), 'albums': $('#txtAlbums').val() });  
            $('#uploadify').uploadifyUpload();  
        }  
    </script>  
</head>  
<body>  
    <div id="fileQueue"></div>  
    <input type="file" name="uploadify" id="uploadify" />  
    <p>  
        <a href="javascript:void(0);" οnclick="uploadpara();">上传</a>|   
        <a href="javascript:$('#uploadify').uploadifyClearQueue()">取消上传</a>  
    </p>  
</body>  
</html>  
	/**
	 * 添加知识库文件
	 * @return
	 */
	public void addKbmArticleFile() {
		 String  kbmArticleId = request.getParameter("kbmArticleId");
		 KbmArticle kbmArticleTemp=null;
		 if (kbmArticleId!=null&&!"".equals(kbmArticleId)) {
			 kbmArticleTemp = (KbmArticle) kbmService.getKbmArticleDAO().findObjectByID(Integer.valueOf(kbmArticleId));
		 }else {
			 kbmArticleTemp = kbmService.getKbmArticleDAO().findMaxIdArticleOne();
		}
		  
		 Integer nodeID = kbmArticleTemp.getKbmNode().getNodeId();
		 KbmNode kbmNode = (KbmNode)kbmService.getKbmNodeDAO().findObjectByID(nodeID);
		 String nodeCode = kbmNode.getNodeCode();
		 String codeStr = "";
		 for (int i = 0; i < nodeCode.length(); i+=3) {
			codeStr = codeStr + nodeCode.substring(i, i+3)+"/";
		}
		 String uploadMediaPath = SysPropertyUtil.getUploadMediaPath() + "/uploadFile/"+codeStr+kbmArticleTemp.getArticleId()+"/";
		 System.out.println("uploadMediaPath文章的真实存储路径为:="+uploadMediaPath);
		 List<File> files=getUploadify();
		 if (kbmArticleTemp!=null) {
			 for(int i=0;i<files.size();i++){
				 String fileNameOfAdd = kbmArticleTemp.getActicleFileName();
				 if (fileNameOfAdd==null||"".equals(fileNameOfAdd)) {
					 kbmArticleTemp.setActicleFileName(getUploadifyFileName().get(i));
				}else {
					kbmArticleTemp.setActicleFileName(fileNameOfAdd+","+getUploadifyFileName().get(i));
				}
			     System.out.println("ActicleFileName==="+kbmArticleTemp.getActicleFileName());
			     String filePath = uploadMediaPath +  getUploadifyFileName().get(i);
			     FileUtil.delFile(filePath );
				FileUploader.upload(files.get(i), uploadMediaPath, getUploadifyFileName().get(i), false);//文件上传
				 String filenames = kbmArticleTemp.getActicleFileName();
				 String[] names = filenames.split(",");
				 int num = 0;
				 for(int k = 0; k < names.length; k++){
					 if(names[k].equals(getUploadifyFileName().get(i))){
						 num = k;
						 break;
					 }
				 }
				 
				 
				//获取上传文件的扩展名  
	             DocConverter d = new DocConverter(filePath,kbmArticleTemp.getArticleId(),num);  
				 d.conver();
				 
				 try {
					User user = (User) ServletActionContext.getRequest().getSession().getAttribute("user");
					kbmArticleTemp.setUser(user);
					kbmService.updateArticle(kbmArticleTemp);
				} catch (Exception e) {
					e.printStackTrace();
				}
			 }
		}
		responseDatagrid(response, request, "1");
	}
package cn.ltone.xunshi.common.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

import cn.ltone.xunshi.model.entity.KbmArticle;
import cn.ltone.xunshi.model.entity.KbmNode;

import com.opensymphony.xwork2.ActionContext;



public class FileUploader {
	protected  final static  Logger log = Logger.getLogger(FileUploader.class);
	private static final int BUFFER_SIZE=10240;
	/**
	 * 上传文件 返回正数表示成功上传文件的大小,负数表示错误代码
	 * @param file 要上传的文件
	 * @param savePath 保存路径(磁盘上的实际路径),如果不存在,则创建
	 * @param fileName 文件名称(带后缀,例如:qq.exe)
	 * @param cover 如果要保存的路径下存在相同文件名的文件,是否覆盖,true表示覆盖,false表示不覆盖
	 * @return 上传结果<br> 正数表示成功上传的文件的大小;<br>-1表示参数错误;<br>-2表示系统异常;<br>-3表示不允许覆盖时文件已存在
	 * @author helin
	 */
	public static long upload(File file,String savePath, String fileName,boolean cover) {
		if(file==null || StringUtils.isEmpty(savePath) ||StringUtils.isEmpty(fileName)){
			return -1;
		}
		long fileSize=0;//文件大小
		double resFileSize = file.length();//源文件大小
		FileOutputStream out =null;
		FileInputStream inn=null;
		try {
			File saveDirectory = new File(savePath);
			// 如果上传文件的存放路径文件夹不存在,则创建
			if (!saveDirectory.isDirectory()) {
				saveDirectory.mkdirs();
				log.info("创建" +saveDirectory + "目录");
			}
			String fileFullPath=savePath + File.separator + fileName;
			File checkExistFile=new File(fileFullPath);
			if(checkExistFile.exists()&& !cover){
				log.info("文件"+fileFullPath+"已存在,上传失败");
				return -3;
			}
			out = new FileOutputStream(fileFullPath);
			byte[] buffer = new byte[BUFFER_SIZE];
			inn= new FileInputStream(file);
//			读数据流时不能写成以下注释的形式,否则会因为最后一个read buffer多出一些字节而导致上传的手机软件不能在手机上运行
//			while (inn.read(buffer) != -1) {
//			os.write(buffer, 0, buffer.length);
//			}
			while (true) {
				int len=inn.read(buffer);
				if(len==-1){
					break;
				}else{
					fileSize+=len;
					//存放到session中的uploadrate变量
					ActionContext.getContext().getSession().put("uploadrate", fileSize/resFileSize);
					/*System.out.println(ActionContext.getContext().getSession().get("uploadrate"));*/
					out.write(buffer, 0, len);
				}
			}
			log.info("上传成功,保存地址为:"+fileFullPath+",文件大小为:"+fileSize);
			return fileSize;
		} catch (Exception e) {
			log.error("上传文件"+savePath + File.separator + fileName+"时出现异常,错误信息:"+e.toString());
			return -2;
		}finally{
			try {
				if(out!=null){
					out.close();
				}
				if(inn!=null){
					inn.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
	}
	
	public static void downFile(HttpServletResponse response, String str,String FilePath) {
//   	 String FilePath = SysPropertyUtil.getUploadMediaPath() + "/uploadFile/";
		 response.setContentType("text/html; charset=utf-8");
       try {    
           String path = FilePath + str;    
           File file = new File(path);    
           if (file.exists()) {    
               InputStream ins = new FileInputStream(path);    
               BufferedInputStream bins = new BufferedInputStream(ins);// 放到缓冲流里面    
               OutputStream outs = response.getOutputStream();// 获取文件输出IO流    
               BufferedOutputStream bouts = new BufferedOutputStream(outs);    
               response.setContentType("application/x-download");// 设置response内容的类型    
               response.setHeader(    
                       "Content-disposition",    
                       "attachment;filename="    
                               + URLEncoder.encode(str, "UTF-8"));// 设置头部信息    
               int bytesRead = 0;    
               byte[] buffer = new byte[8192];    
               // 开始向网络传输文件流    
               while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {    
                   bouts.write(buffer, 0, bytesRead);    
               }    
               bouts.flush();// 这里一定要调用flush()方法    
               ins.close();    
               bins.close();    
               outs.close();    
               bouts.close();    
           } else {    
               response.sendRedirect("../error.jsp");    
           }    
       } catch (IOException e) {    
          e.printStackTrace();   
       }    
   }
	
	public static void moreDownloadFile(HttpServletResponse response,String fileNameStr,KbmArticle kbmArticleTemp, KbmNode kbmNode) {
		 String nodeCode = kbmNode.getNodeCode();
		 String articleName = kbmArticleTemp.getArticleName();
		 String codeStr = "";
		 for (int i = 0; i < nodeCode.length(); i+=3) {
			codeStr = codeStr + nodeCode.substring(i, i+3)+"/";
		}
		 String FilePath = SysPropertyUtil.getUploadMediaPath() + "/uploadFile/"+codeStr+kbmArticleTemp.getArticleId()+"/";
		 System.out.println("FilePath文章的真实存储路径为:="+FilePath);
//       String lastFileNames = fileNameStr.substring(0, fileNameStr.length()-1);
       //生成的ZIP文件名为articleName+".zip";    
       String tmpFileName=articleName+".zip";
       String strZipPath = FilePath + tmpFileName;  
       byte[] buffer = new byte[1024]; 
       String[] fileNames  = fileNameStr.split(",");
       int n =fileNames.length;
       File[] file1 =new File[n]; 
       int count = 0; //计数器,如果下载文章数量为1,不打包下载
       String singleFileName = null;
		for (int i=0;i<fileNames.length;i++) {
			String fileRelPath = FilePath + fileNames[i];
			File fileTemp = new File(fileRelPath);
			if (fileTemp.exists()) {
				file1[i]=new File(fileRelPath);
				singleFileName = fileNames[i];
				count ++;
			}
//			System.out.println("fileStr="+fileNames[i]);
		}
	
		if(count==1){
			downFile(response,singleFileName ,FilePath); 
			return ;
		}
		
       try {    
           ZipOutputStream out = new ZipOutputStream(new FileOutputStream(    
                   strZipPath));    
           for (int i = 0; i < file1.length; i++) {    
               FileInputStream fis = new FileInputStream(file1[i]);    
               out.putNextEntry(new ZipEntry(file1[i].getName()));    
               //设置压缩文件内的字符编码,不然会变成乱码    
               out.setEncoding("gbk");    
               int len;    
               // 读入需要下载的文件的内容,打包到zip文件    
               while ((len = fis.read(buffer)) > 0) {    
                   out.write(buffer, 0, len);    
               }    
               out.closeEntry();    
               fis.close();    
           }    
           out.close();    
           downFile(response, tmpFileName,FilePath);    
       } catch (Exception e) {    
           e.printStackTrace();   
       } 
		
	}
public static void main(String[] args) {
	File file=new File("c:\\0.rar");
	FileUploader.upload(file, "d:\\aa\\heh", "bcbbd.rar",false);
}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值