使用Jquery uploadify上传文件

 
 
一、简介
Uploadify JQuery 的一个上传插件,实现的效果非常不错,带进度显示;可以上传多个文件;
详细的使用方法网上有很多,建议到官网参考,这里仅仅展示其使用的效果;
官网: www . uploadify . com 在官网下载最新的版本;但是本人下载 Uploadify 所需的所有 JS 最新文件,不知为何原因不能正确显示,只好将原有项目的 JS 文件拷贝进自己的项目中,其中必须的文件: jquery - 1.4 . 2 . min . js
jquery . uploadify . v2 . 1.0 . min . js swfobject . js uploadify . swf
其中 swfobject . js 这个 JS 是用于在 HTML 中方面插入 Adobe Flash 媒体资源( *. swf 文件)的独立、敏捷的 JavaScript 模块,该模块中的 JavaScript 脚本能够自动检测 PC Mac 机器上各种 主流浏览器对 Flash 插件的支持情况。
以上所需的 JS 文件本人全部在官网下载最新的版本,但是使用失败,我能力有限只能归罪于版本的兼容;便使用了原有的文件;
二、有了必须的资源之后,就是将所需的文件导入:
下图便为项目的目录结构
QQ 图片 20130531205312 . jpg
项目准备好之后,便开始构建上传的功能了;当然要将需要的文件在 jsp 页面说明;
首先 index . js
view sourceprint ?
01 .
<% @ page language = "java" import = "java.util.*" pageEncoding = "UTF-8" %>
02 .
<%
03 .
String path = request . getContextPath ();
04 .
String basePath = request . getScheme ()+ "://" + request . getServerName ()+ ":" + request . getServerPort ()+ path + "/" ;
05 .
%>
06 .
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
07 .
< html >
08 .
< head >
09 .
< base href = "<%=basePath%>" >
10 .
< title > 更改头像 </ title >
11 .
< meta http - equiv = "pragma" content = "no-cache" >
12 .
< meta http - equiv = "cache-control" content = "no-cache" >
13 .
< meta http - equiv = "expires" content = "0" >
14 .
< meta http - equiv = "keywords" content = "keyword1,keyword2,keyword3" >
15 .
< meta http - equiv = "description" content = "This is my page" >
16 .
17 .
< link rel = "stylesheet" href = \'#\' " /default.css" type = "text/css" ></ link >
18 .
< link rel = "stylesheet" href = \'#\' " /uploadify.css" type = "text/css" ></ link >
19 .
< link rel = "stylesheet" href = \'#\' " /jquery.Jcrop.css" type = "text/css" ></ link >
20 .
21 .
< script type = "text/javascript" src = \'#\' " /jquery-1.4.2.min.js" ></ script >
22 .
< script type = "text/javascript" src = \'#\' " /jquery.uploadify.v2.1.0.min.js" ></ script >
23 .
< script type = "text/javascript" src = \'#\' " /swfobject.js" ></ script >
24 .
< script type = "text/javascript" src = \'#\' " /fileupload.js" ></ script >
25 .
//fileupload.js是自己封装的JS文件,主要便是使用uploadify插件
26 .
</ head >
27 .
< body >
28 .
< div > </ div >
29 .
< div style = "font-size: 15px;" >
30 .
图片文件 :& nbsp & nbsp & nbsp
31 .
< input type = "file" name = "file" id = "file" /></ div >
32 .
< input type = "button" id = "uploadFile" value = "上传文件" >
33 .
< input type = "button" id = "cancelUpload" value = "取消上传" >
34 .
< div id = "fileList" style = "height:51px;" ></ div >
35 .
</ table >
36 .
</ body >
37 .
</ html >
这个 index . jsp 的预览效果图如下:
得到 . jpg
这里使用 uploadify 插件的操作封装成 JS 文件也放在了 js 目录下(上面的截图中有被涂鸦了,嘿嘿),代码如下:
view sourceprint ?
01 .
$ ( document ). ready ( function () {
02 .
$ ( "#file" ). uploadify ({
03 .
' uploader ' : ' js / uploadify . swf ' ,
04 .
' script ' : ' UploadServlet ' ,
05 .
' cancelImg ' : ' js / cancel . png ' ,
06 .
' queueID ' : ' fileList ' , // 和存放队列的DIV的id一致
07 .
' fileDataName ' : ' file ' , // 和以下input的name属性一致
08 .
' auto ' : false , // 是否自动开始
09 .
' multi ' : false , // 是否支持多文件上传
10 .
' buttonText ' : ' Brower ' , // 按钮上的文字
11 .
' simUploadLimit ' : 1 , // 一次同步上传的文件数目
12 .
' sizeLimit ' : 3145728 , // 设置单个文件大小限制 3MB
13 .
' queueSizeLimit ' : 1 , // 队列中同时存在的文件个数限制
14 .
' fileDesc ' : '支持格式 : jpg / jpeg ' , // 如果配置了以下的'fileExt'属性,那么这个属性是必须的
15 .
' fileExt ' : ' *. jpg ;*. jpeg ; ' , // 允许的格式
16 .
' displayData ' : ' percentage ' ,
17 .
onComplete : function () {
18 .
alert ( "文件上传成功" );
19 .
},
20 .
onError : function ( event , queueID , fileObj ) {
21 .
alert ( "文件:" + fileObj . name + "上传失败" );
22 .
}
23 .
24 .
});
25 .
$ ( "#uploadFile" ). click ( function () {
26 .
$ ( "#file" ). uploadifyUpload ();
27 .
28 .
});
29 .
});
到这里其前台的工作已经做完,便着手处理业务逻辑了;
三、当选择好文件之后, uploadify 组件会如下显示一个进度条:
得到的 . jpg
当你点击上传文件时候,便会调用你自己的文件上传的 Servlet ,实现文件的上传;先展示文件上传成功的界面:
QQ 点点滴滴 . jpg
下面为文件上传的 Servlet
view sourceprint ?
001 .
package com . xzb . fileUpload ;
002 .
import java.io.File ;
003 .
import java.io.IOException ;
004 .
import java.io.PrintWriter ;
005 .
import java.util.Iterator ;
006 .
import java.util.List ;
007 .
import javax.servlet.ServletException ;
008 .
import javax.servlet.http.HttpServlet ;
009 .
import javax.servlet.http.HttpServletRequest ;
010 .
import javax.servlet.http.HttpServletResponse ;
011 .
import org.apache.commons.fileupload.FileItem ;
012 .
import org.apache.commons.fileupload.FileUploadException ;
013 .
import org.apache.commons.fileupload.disk.DiskFileItemFactory ;
014 .
import org.apache.commons.fileupload.servlet.ServletFileUpload ;
015 .
public class UploadServlet extends HttpServlet {
016 .
public void doGet ( HttpServletRequest request , HttpServletResponse response )
017 .
throws ServletException , IOException {
018 .
this . doPost ( request , response );
019 .
}
020 .
public void doPost ( HttpServletRequest request , HttpServletResponse response )
021 .
throws ServletException , IOException {
022 .
request . setCharacterEncoding ( "UTF-8" );
023 .
response . setContentType ( "text/html;charset=UTF-8" );
024 .
System . out . println ( "文件上传开始……" );
025 .
String savePath = generateDir ();
026 .
processUpload ( request , response , savePath );
027 .
028 .
}
029 .
/*
030.
* 上传处理方法
031.
*/
032 .
public void processUpload ( HttpServletRequest request ,
033 .
HttpServletResponse response , String savePath ) {
034 .
035 .
036 .
DiskFileItemFactory factory = new DiskFileItemFactory ();
037 .
// 缓存大小为512KB
038 .
factory . setSizeThreshold ( 524288 );
039 .
// 临时文件夹
040 .
factory . setRepository ( new File ( savePath + "/temp" ));
041 .
// 初始化上传控件
042 .
ServletFileUpload upload = new ServletFileUpload ( factory );
043 .
// 文件大小最大3MB
044 .
upload . setFileSizeMax ( 3145728 );
045 .
upload . setHeaderEncoding ( "UTF-8" );
046 .
List fileList = null ;
047 .
try {
048 .
fileList = upload . parseRequest ( request );
049 .
} catch ( FileUploadException e ) {
050 .
e . printStackTrace ();
051 .
}
052 .
Iterator < FileItem > it = fileList . iterator ();
053 .
String name = "" ;
054 .
String filename = "" ;
055 .
while ( it . hasNext ()) {
056 .
FileItem item = it . next ();
057 .
if (! item . isFormField ()) {
058 .
name = item . getName ();
059 .
if ( name != null && ! name . trim (). equals ( "" )) {
060 .
filename = generateFileName ( name );
061 .
File file = new File ( savePath + "/" + filename );
062 .
try {
063 .
item . write ( file );
064 .
String imgstr = this . getServletContext ()
065 .
. getContextPath ();
066 .
imgstr = imgstr + "/upload/" + filename ;
067 .
response . getWriter (). write ( "http://localhost:8080" + imgstr );
068 .
} catch ( Exception e ) {
069 .
e . printStackTrace ();
070 .
}
071 .
}
072 .
}
073 .
}
074 .
}
075 .
/*
076.
* 初始化文件存储路径
077.
*/
078 .
private String generateDir () {
079 .
String pathString = getServletConfig (). getServletContext (). getRealPath (
080 .
"/upload" );
081 .
String tempString = getServletConfig (). getServletContext (). getRealPath (
082 .
"/upload/temp" );
083 .
File dirPath = new File ( pathString );
084 .
File dirTemp = new File ( tempString );
085 .
if (! dirPath . exists ()) {
086 .
dirPath . mkdirs ();
087 .
}
088 .
if (! dirTemp . exists ()) {
089 .
dirTemp . mkdirs ();
090 .
}
091 .
return pathString ;
092 .
}
093 .
/*
094.
* 生成文件名
095.
*/
096 .
private String generateFileName ( String name ) {
097 .
long currentTime = System . currentTimeMillis ();
098 .
int i = ( int ) ( Math . random () * 1000 D + 1.0 D );
099 .
long result = currentTime + i ;
100 .
String filename = String . valueOf ( result ) + getFileExt ( name );
101 .
return filename ;
102 .
}
103 .
/*
104.
* 获取文件格式
105.
*/
106 .
private String getFileExt ( String name ) {
107 .
int pos = name . lastIndexOf ( "." );
108 .
if ( pos > 0 ) {
109 .
return name . substring ( pos );
110 .
} else {
111 .
return name ;
112 .
}
113 .
}
114 .
}
至此,到你 Servlet 中所写的目录下查看是否有文件已经传来:
QQ 图片 20 谁谁谁 4 . jpg
至此,利用组将实现文件上传,其本质这个组件并没有实现文件的上传,自己必须亲自写好上传的业务逻辑,组件只是简化并是上传界面友好罢了!只要组件的参数和方法使用恰当,便能自定义许多其他属性;
这个仅仅是一个开始,接下来还要将上传来的图片进行预览剪切,这时候会用到其他的 jQuery 组件,达到类似于论坛更换剪切头像的目的;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值