Uploadify上传⽂件⽅法
Uploadify是JQuery的⼀个上传插件,实现的效果⾮常不错,带进度显⽰。不过官⽅提供的实例时php版本的,本⽂将详细介绍Uploadify在Aspnet中的使⽤,您也可以点击下⾯的链接进⾏演⽰或下载。
先给⼤家展⽰下效果图:
修改:
报不到uploadify-cancel.png⽂件。到uploadify.css,到.uploadify-queue-item .cancel a {,修改⽂件的路径。
好多⼈都说,在chrome、Firefox上使⽤uploadify的时候获取不到session导致上传出错。需要⼿⼯将session id⽅法附加参数中。但是我这⾥并没有这么做,并且在chrome、Firefox上传没问题,不知道为什么,也许是因为我⽤的最新版的原因吧。
要点:
uploadify的js配置已经⽐较全⾯,在实际使⽤的时候可以适当的删减⼀些⽅法和属性。
⼀般情况下的单⽂件上传只考虑onSelect、onUploadError和onUploadSuccess即可。
如果是多⽂件上传,那么在单⽂件上传的基础上再加上对整个队列的监听onQueueComplete。
开始上传所有⽂件:$('#file_upload').uploadify('upload', '*');
取消上传:$('#file_upload').uploadify('cancel', parm);
parm为空:取消上传第⼀个⽂件。
parm为'*':取消所有的上传⽂件。
parm为file id:取消该file id对应的⽂件。
修改附加的⼀些变量:$('#file_upload').uploadify("settings","formData",{"name1":"中⽂name","parm1":"修改后的参数"});参数为json,如果该json中的某个变量已经有了,那么覆盖该属性,如果没有,那么追加该属性。
服务端设置编码为:upload.setHeaderEncoding("UTF-8");,这样解析的⽂件名称为正常中⽂。但是解析的附加变量中⽂乱码,这⾥做⼀次转码(总感觉转码⽐较low,不知道是哪⾥配置的不对)。new String().getBytes("iso8859-1"),"utf-8")
服务端最后返回⽂件保存路径(这⾥可以随便定义返回内容)。
步骤:
配置uploadify
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%String path = ContextPath();%>
<%String basePath = Scheme()+"://"+ServerName()+":"+ServerPort()+path+"/";%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<base href="<%=basePath %>">
<title></title>
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.4.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.4.3/themes/icon.css">
<script type="text/javascript" src="jquery-easyui-1.4.3/jquery.min.js"></script>
<script type="text/javascript" src="jquery-easyui-1.4.3/jquery.easyui.min.js"></script>
<script type="text/javascript" src="uploadify/uploadify/jquery.uploadify.min.js"></script>
<link rel="stylesheet" type="text/css" href="uploadify/uploadify/uploadify.css" />
</head>
<script>
$(function(){
$(function() {
$(function() {
$('#file_upload').uploadify({
'uploader' : '<%=basePath%>/UploadServlet',//服务端地址
'swf' : 'uploadify/uploadify/uploadify.swf',
'buttonImage' : 'uploadify/uploadify/img/chooseFile.jpg',//重载按钮图⽚
'buttonClass' : 'some-class',//重载按钮样式
'height':19,//按钮宽度和⾼度
'width':76,
'queueID' : 'file_queue',//显⽰⽂件队列的⼀个div,在页⾯定义
'formData' : {'parm1':'参数1','year':'2016'},//附加参数,可以在upload参数中更改
'buttonText':'选择⽂件',//按钮显⽰⽂字,如果有图⽚的话,会被图⽚挡住
'fileSizeLimit':'1MB',//⽂件最⼤
'auto':false,//⾃动提交
'fileTypeExts' : '*.gif; *.jpg; *.png',//⽂件类型
'fileTypeDesc' : '只能上传图⽚',//选择⽂件的时候的提⽰信息
'multi' : true,//多选
'queueSizeLimit' : 3,//队列中⽂件的个数
'onSelect' : function(file) {
console.log(file);
alert("选择⽂件:" + file.name + "\n类型="+pe+"\n⼤⼩="+file.size);
if(file.size>1024000){//⽂件太⼤,取消上传该⽂件
alert("⽂件⼤⼩超过限制!");
$('#file_upload').uploadify('cancel',file.id);
}
},
'onUploadSuccess' : function(file, data, response) {
alert('每个⽂件上传成功后触发 ' + file.name + ' was successfully uploaded with a response of ' + response + ':' + data); },
'onUploadComplete' : function(file) {
alert('每个⽂件上传完成,⽆论对错都触发! ' + file.name + ' finished processing.');
},
'onUploadError' : function(file, errorCode, errorMsg, errorString) {
alert('上传出错 ' + file.name + ' could not be uploaded: ' + errorString);
},
'onQueueComplete':function(queueData){
alert("队列中的所有⽂件上传完成后触发。\n"+queueData.uploadsSuccessful+'\n'+queueData.uploadsErrored)
},
});
});
});
});
function upload(){
$('#file_upload').uploadify("settings","formData",{"name1":"中⽂name","parm1":"修改后的参数"});
$('#file_upload').uploadify('upload', '*');//上传所有⽂件
}
function cancel(){
$('#file_upload').uploadify('cancel', '*');//取消所有⽂件
}
function destroy(){
alert("取消upload上传,变成原来样式!");
$('#file_upload').uploadify('destroy');//destory
}
</script>
<body>
<div class="easyui-panel" title="说明" >
</div>
<div class="easyui-panel" >
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="upload()">开始上传</a>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="cancel()">取消上传</a>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="destroy()">destroy</a>
<input type="file" name="file_upload" id="file_upload" />
<div id="file_queue" ></div>
</div>
</body>
</html>
服务端
package com.servlet;
import java.io.File;
import java.io.IOException;
SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apachemons.fileupload.FileItem;
import org.apachemons.fileupload.FileUploadException;
import org.apachemons.fileupload.disk.DiskFileItemFactory;
import org.apachemons.fileupload.servlet.ServletFileUpload;
/**
* Servlet implementation class UploadServlet
*/
@WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = -6483558339095298703L;
/**
* @see HttpServlet#HttpServlet()
*/
public UploadServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("获取session,可以根据这个session进⾏⼀些其他的判断" + Session().getId()); SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
String remotePath = File.separator + "download" + File.separator + sdf.format(new Date()) + File.separator;
String savePath = remotePath;
File dfile = new File(savePath);
if (!ists()) {
dfile.mkdirs();
}
DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setHeaderEncoding("UTF-8");
List<FileItem> fileList = null;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException ex) {
return;
}
Iterator<FileItem> it = fileList.iterator();
String name = "";
String extName = "";
while (it.hasNext()) {
FileItem item = it.next();
if (!item.isFormField()) {
name = Name();
long size = Size();
String type = ContentType();
System.out.println("⽂件=" + name + " " + size + " " + type);
if (name == null || im().equals("")) {
continue;
}
// 扩展名格式:
if (name.lastIndexOf(".") >= 0) {
extName = name.substring(name.lastIndexOf("."));
}
File file = null;
do {
// ⽣成⽂件名:
name = UUID.randomUUID().toString();
file = new File(savePath + name + extName);
} while (ists());
File saveFile = new File(savePath + name + extName);
try {
item.write(saveFile);
} catch (Exception e) {
mkdirs方法e.printStackTrace();
}
}else if(item.isFormField()){
System.out.println("表单内容:" + FieldName() + "=" + new String().getBytes("iso8859-1"),"utf-8")); }
}
String requestPath = remotePath + name + extName; Session().setAttribute(requestPath, requestPath); Writer().write(savePath + name + extName);
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论