<%@ 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);
}
}