我是靠谱客的博主 奋斗冥王星,这篇文章主要介绍jQuery File Upload blueimp with struts2 简单试用,现在分享给大家,希望可以做个参考。

Official Site的话随便搜索就可以去了

另外新版PHP似乎都有问题  虽然图片都可以上传  但是response报错  我下载的是8.8.7木有问题   但是8.8.7版本结合修改main.js上传部分修改为自己的地址后天剑文件start按钮会一直灰色...

所以还是下载最新版比较好

PS帮助文档有点乱   先看这个 https://github.com/blueimp/jQuery-File-Upload/wiki/Setup

这里还有个https://github.com/blueimp/jQuery-File-Upload/wiki/Basic-plugin  用处不是很大  毕竟我现在只是拿来用  不分析

关于第一个连接  仔细阅读 custom server-side upload handler  这个部分

也就是要修改main.js 以及 页面中input的name值  这个input的name值要和struts中的匹配才行

另外注意一下server的返回值 custom server-side upload handler 中有说明 是一个JSON格式的值  按照它的格式来

 

不过我有点小疑问   观察官方下载的Demo  所谓的多文件上传实际上就是多次向后台发送请求而已  并不是同一个请求发送多个文件

所以服务端的返回json格式中files中总是只有一个文件....

 

main.js中地址部分改为自己的地址

复制代码
1
2
3
4
5
6
$('#fileupload').fileupload({ disableImageResize: false, // Uncomment the following to send cross-domain cookies: //xhrFields: {withCredentials: true}, url: 'UploadAction_handle.action' });

 

 上传处理Action

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
package action; 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.io.PrintWriter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import utils.MyUploadPic; import utils.MyUploadPicList; import com.google.gson.Gson; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { private static final long serialVersionUID = 572146812454l; private static final int BUFFER_SIZE = 16 * 1024; // 这里的BUFFER_SIZE // 表示一个数据缓冲区是16KB // 所以写出的文件最小是16KB private File[] myFile; // myFile就是用户准备上传的文件 private String[] myFileContentType; private String[] myFileFileName; // 用户上传文件的真实文件名 // 当然了 这里的属性命名是任意的 // 但是要保证和页面元素中的 name属性的值要匹配 // 比如 页面中input 的name是myFile 我这里就应该有 setMyFile getMyFile // 为了减少出错, 属性都用对应的名字好了 // 若文件对象的名字是xxx 文件类型就应是 xxxContentType 真实文件名则应是xxxFileName // private String caption; public File[] getMyFile() { return myFile; } public void setMyFile(File[] myFile) { this.myFile = myFile; } public String[] getMyFileContentType() { return myFileContentType; } public void setMyFileContentType(String[] myFileContentType) { this.myFileContentType = myFileContentType; } public String[] getMyFileFileName() { return myFileFileName; } public void setMyFileFileName(String[] myFileFileName) { this.myFileFileName = myFileFileName; } private String fileDir="D:/workspace/files/"; // 为了保证上传文件不会重名 // 文件名以当前毫秒数保存 private String saveFileName; // 以当前毫秒数为文件名 private static String getExtention(String fileName) { int pos = fileName.lastIndexOf("."); return fileName.substring(pos); } private String getFilenameWithoutExstension(String filename) { int pos = filename.lastIndexOf("."); if (pos >= 0 && pos < filename.length()) { return filename.substring(0, pos); } else { return ""; } } //这是进入Action后首先执行的方法 //前台会发送两种请求 一种是 public String handle() throws Exception { System.out.println("0000000 upload !!!"); HttpServletRequest request = ServletActionContext.getRequest(); System.out.println("000000 request"+request.getMethod()); HttpServletResponse response = ServletActionContext.getResponse(); //当request的类型是DELETE时 执行删除操作 if(request.getMethod().equals("DELETE")){ deleteFiles(request,response); }else if(request.getMethod().equals("POST")){ upload(request,response); } return null; } public String upload(HttpServletRequest request ,HttpServletResponse response ){ MyUploadPicList files = new MyUploadPicList(); List<MyUploadPic> list = new ArrayList<MyUploadPic>(); for (int i = 0; i < myFile.length; i++) { saveFileName = getFilenameWithoutExstension(myFileFileName[i]) + new Date().getTime() + getExtention(myFileFileName[i]); // writeFile 就是以当前毫秒数为文件名的文件 /* * File writeFile = new * File(ServletActionContext.getServletContext() * .getRealPath("/files") + "/" + saveFileName); */ File writeFile = new File(fileDir + saveFileName); System.out.println("000000000 tmp " + myFile[i]); copy(myFile[i], writeFile); MyUploadPic pic = new MyUploadPic(); try { pic.setSize((int) getFileSizes(myFile[i])); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } pic.setName(saveFileName); // pic.setThumbnailUrl("http://localhost/jQuery-File-Upload-8.8.7/server/php/files/thumbnail/jhhbimages.jpg"); pic.setDeleteUrl("UploadAction_handle.action?file="+saveFileName); pic.setDeleteType("DELETE"); list.add(pic); } files.setFiles(list); PrintWriter writer=null; try { writer = response.getWriter(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } String jsonStr = new Gson().toJson(files); System.out.println(jsonStr); writer.print(jsonStr); writer.flush(); writer.close(); return null; } public void deleteFiles(HttpServletRequest request,HttpServletResponse response) { ActionContext context = ActionContext.getContext(); Map params = context.getParameters(); String[] myParams = (String[]) params.get("file"); String delFileName=myParams[0]; System.out.println("00000000 del my file name"+delFileName); File delFile=new File(fileDir+delFileName); delFile.delete(); PrintWriter writer=null; try { writer = response.getWriter(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //注意观察Official Demo 删除时返回的内容是 {"待删除文件的文件名":true} //{"index.jpg":true} //有了这个response 前台就知道已经删除 就会自动消除文件 String jsonStr="{""+delFileName+"":true"+"}"; System.out.println(jsonStr); writer.print(jsonStr); writer.flush(); writer.close(); } private static void copy(File src, File dst) { System.out.println("000000 src dst " + src.getPath() + " " + dst.getPath()); try { InputStream in = null; OutputStream out = null; try { in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE); out = new BufferedOutputStream(new FileOutputStream(dst), BUFFER_SIZE); // 上传的最小文件不能小于 1 KB 否则会出现找不到文件的错误 byte[] buffer = new byte[BUFFER_SIZE]; while (in.read(buffer) > 0) { out.write(buffer); } } finally { if (null != in) { in.close(); } if (null != out) { out.close(); } } } catch (Exception e) { e.printStackTrace(); } } /* 获取文件大小 */ public long getFileSizes(File f) throws Exception {// 取得文件大小 long s = 0; if (f.exists()) { FileInputStream fis = null; fis = new FileInputStream(f); s = fis.available(); } else { f.createNewFile(); System.out.println("文件不存在"); } return s; } }

 

页面

Basic页面

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<%@page contentType="text/html; charset=GBK" language="java"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script src="js/vendor/jquery.ui.widget.js"></script> <script src="js/jquery.iframe-transport.js"></script> <script src="js/jquery.fileupload.js"></script> </head> <body> <input id="fileupload" type="file" name="myFile" data-url="UploadAction_handle.action" multiple> <div id="progress"> <div class="bar" style="width: 0%;"></div> </div> <div id="target">target</div> <p></p><p></p><p></p><p></p><p></p> <script> $('#fileupload').fileupload({ dataType : 'json', done : function(e, data) { $.each(data.result.files, function(index, file) { $('<p/>').text(file.name).appendTo(document.body); }); } }); $("#target").click(function() { alert("Handler for .click() called."); $('#fileupload').fileupload({ dataType : 'json', done : function(e, data) { $.each(data.result.files, function(index, file) { $('<p/>').text(file.name).appendTo(document.body); }); } }); }); </script> </body> </html>

完整页面

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
<!DOCTYPE HTML> <!-- /* * jQuery File Upload Plugin Demo 9.0.1 * https://github.com/blueimp/jQuery-File-Upload * * Copyright 2010, Sebastian Tschan * https://blueimp.net * * Licensed under the MIT license: * http://www.opensource.org/licenses/MIT */ --> <html lang="en"> <head> <!-- Force latest IE rendering engine or ChromeFrame if installed --> <!--[if IE]> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <![endif]--> <meta charset="utf-8"> <title>jQuery File Upload Demo</title> <meta name="description" content="File Upload widget with multiple file selection, drag&amp;drop support, progress bars, validation and preview images, audio and video for jQuery. Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads."> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Bootstrap styles --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css"> <!-- Generic page styles --> <link rel="stylesheet" href="css/style.css"> <!-- blueimp Gallery styles --> <link rel="stylesheet" href="http://blueimp.github.io/Gallery/css/blueimp-gallery.min.css"> <!-- CSS to style the file input field as button and adjust the Bootstrap progress bars --> <link rel="stylesheet" href="css/jquery.fileupload.css"> <link rel="stylesheet" href="css/jquery.fileupload-ui.css"> <!-- CSS adjustments for browsers with JavaScript disabled --> <noscript><link rel="stylesheet" href="css/jquery.fileupload-noscript.css"></noscript> <noscript><link rel="stylesheet" href="css/jquery.fileupload-ui-noscript.css"></noscript> </head> <body> <div class="navbar navbar-default navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-fixed-top .navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="https://github.com/blueimp/jQuery-File-Upload">jQuery File Upload</a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li><a href="https://github.com/blueimp/jQuery-File-Upload/tags">Download</a></li> <li><a href="https://github.com/blueimp/jQuery-File-Upload">Source Code</a></li> <li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki">Documentation</a></li> <li><a href="https://blueimp.net">&copy; Sebastian Tschan</a></li> </ul> </div> </div> </div> <div class="container"> <h1>jQuery File Upload Demo</h1> <h2 class="lead">Basic Plus UI version</h2> <ul class="nav nav-tabs"> <li><a href="basic.html">Basic</a></li> <li><a href="basic-plus.html">Basic Plus</a></li> <li class="active"><a href="index.html">Basic Plus UI</a></li> <li><a href="angularjs.html">AngularJS</a></li> <li><a href="jquery-ui.html">jQuery UI</a></li> </ul> <br> <blockquote> <p>File Upload widget with multiple file selection, drag&amp;drop support, progress bars, validation and preview images, audio and video for jQuery.<br> Supports cross-domain, chunked and resumable file uploads and client-side image resizing.<br> Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.</p> </blockquote> <br> <!-- The file upload form used as target for the file upload widget --> <form id="fileupload" action="//jquery-file-upload.appspot.com/" method="POST" enctype="multipart/form-data"> <!-- Redirect browsers with JavaScript disabled to the origin page --> <noscript><input type="hidden" name="redirect" value="http://blueimp.github.io/jQuery-File-Upload/"></noscript> <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload --> <div class="row fileupload-buttonbar"> <div class="col-lg-7"> <!-- The fileinput-button span is used to style the file input field as button --> <span class="btn btn-success fileinput-button"> <i class="glyphicon glyphicon-plus"></i> <span>Add files...</span> <input type="file" name="myFile" multiple> </span> <button type="submit" class="btn btn-primary start"> <i class="glyphicon glyphicon-upload"></i> <span>Start upload</span> </button> <button type="reset" class="btn btn-warning cancel"> <i class="glyphicon glyphicon-ban-circle"></i> <span>Cancel upload</span> </button> <button type="button" class="btn btn-danger delete"> <i class="glyphicon glyphicon-trash"></i> <span>Delete</span> </button> <input type="checkbox" class="toggle"> <!-- The global file processing state --> <span class="fileupload-process"></span> </div> <!-- The global progress state --> <div class="col-lg-5 fileupload-progress fade"> <!-- The global progress bar --> <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100"> <div class="progress-bar progress-bar-success" style="width:0%;"></div> </div> <!-- The extended global progress state --> <div class="progress-extended">&nbsp;</div> </div> </div> <!-- The table listing the files available for upload/download --> <table role="presentation" class="table table-striped"><tbody class="files"></tbody></table> </form> <br> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">Demo Notes</h3> </div> <div class="panel-body"> <ul> <li>The maximum file size for uploads in this demo is <strong>5 MB</strong> (default file size is unlimited).</li> <li>Only image files (<strong>JPG, GIF, PNG</strong>) are allowed in this demo (by default there is no file type restriction).</li> <li>Uploaded files will be deleted automatically after <strong>5 minutes</strong> (demo setting).</li> <li>You can <strong>drag &amp; drop</strong> files from your desktop on this webpage (see <a href="https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support">Browser support</a>).</li> <li>Please refer to the <a href="https://github.com/blueimp/jQuery-File-Upload">project website</a> and <a href="https://github.com/blueimp/jQuery-File-Upload/wiki">documentation</a> for more information.</li> <li>Built with Twitter's <a href="http://twitter.github.com/bootstrap/">Bootstrap</a> CSS framework and Icons from <a href="http://glyphicons.com/">Glyphicons</a>.</li> </ul> </div> </div> </div> <!-- The blueimp Gallery widget --> <div id="blueimp-gallery" class="blueimp-gallery blueimp-gallery-controls" data-filter=":even"> <div class="slides"></div> <h3 class="title"></h3> <a class="prev"></a> <a class="next"></a> <a class="close">×</a> <a class="play-pause"></a> <ol class="indicator"></ol> </div> <!-- The template to display files available for upload --> <script id="template-upload" type="text/x-tmpl"> {% for (var i=0, file; file=o.files[i]; i++) { %} <tr class="template-upload fade"> <td> <span class="preview"></span> </td> <td> <p class="name">{%=file.name%}</p> <strong class="error text-danger"></strong> </td> <td> <p class="size">Processing...</p> <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="progress-bar progress-bar-success" style="width:0%;"></div></div> </td> <td> {% if (!i && !o.options.autoUpload) { %} <button class="btn btn-primary start" disabled> <i class="glyphicon glyphicon-upload"></i> <span>Start</span> </button> {% } %} {% if (!i) { %} <button class="btn btn-warning cancel"> <i class="glyphicon glyphicon-ban-circle"></i> <span>Cancel</span> </button> {% } %} </td> </tr> {% } %} </script> <!-- The template to display files available for download --> <script id="template-download" type="text/x-tmpl"> {% for (var i=0, file; file=o.files[i]; i++) { %} <tr class="template-download fade"> <td> <span class="preview"> {% if (file.thumbnailUrl) { %} <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" data-gallery><img src="{%=file.thumbnailUrl%}"></a> {% } %} </span> </td> <td> <p class="name"> {% if (file.url) { %} <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" {%=file.thumbnailUrl?'data-gallery':''%}>{%=file.name%}</a> {% } else { %} <span>{%=file.name%}</span> {% } %} </p> {% if (file.error) { %} <div><span class="label label-danger">Error</span> {%=file.error%}</div> {% } %} </td> <td> <span class="size">{%=o.formatFileSize(file.size)%}</span> </td> <td> {% if (file.deleteUrl) { %} <button class="btn btn-danger delete" data-type="{%=file.deleteType%}" data-url="{%=file.deleteUrl%}"{% if (file.deleteWithCredentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}> <i class="glyphicon glyphicon-trash"></i> <span>Delete</span> </button> <input type="checkbox" name="delete" value="1" class="toggle"> {% } else { %} <button class="btn btn-warning cancel"> <i class="glyphicon glyphicon-ban-circle"></i> <span>Cancel</span> </button> {% } %} </td> </tr> {% } %} </script> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included --> <script src="js/vendor/jquery.ui.widget.js"></script> <!-- The Templates plugin is included to render the upload/download listings --> <script src="http://blueimp.github.io/JavaScript-Templates/js/tmpl.min.js"></script> <!-- The Load Image plugin is included for the preview images and image resizing functionality --> <script src="http://blueimp.github.io/JavaScript-Load-Image/js/load-image.min.js"></script> <!-- The Canvas to Blob plugin is included for image resizing functionality --> <script src="http://blueimp.github.io/JavaScript-Canvas-to-Blob/js/canvas-to-blob.min.js"></script> <!-- Bootstrap JS is not required, but included for the responsive demo navigation --> <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script> <!-- blueimp Gallery script --> <script src="http://blueimp.github.io/Gallery/js/jquery.blueimp-gallery.min.js"></script> <!-- The Iframe Transport is required for browsers without support for XHR file uploads --> <script src="js/jquery.iframe-transport.js"></script> <!-- The basic File Upload plugin --> <script src="js/jquery.fileupload.js"></script> <!-- The File Upload processing plugin --> <script src="js/jquery.fileupload-process.js"></script> <!-- The File Upload image preview & resize plugin --> <script src="js/jquery.fileupload-image.js"></script> <!-- The File Upload audio preview plugin --> <script src="js/jquery.fileupload-audio.js"></script> <!-- The File Upload video preview plugin --> <script src="js/jquery.fileupload-video.js"></script> <!-- The File Upload validation plugin --> <script src="js/jquery.fileupload-validate.js"></script> <!-- The File Upload user interface plugin --> <script src="js/jquery.fileupload-ui.js"></script> <!-- The main application script --> <script src="js/main.js"></script> <!-- The XDomainRequest Transport is included for cross-domain file deletion for IE 8 and IE 9 --> <!--[if (gte IE 8)&(lt IE 10)]> <script src="js/cors/jquery.xdr-transport.js"></script> <![endif]--> </body> </html>

 

另外两个utils中的类   

MyUploadPic是上传的每一张图片的信息  

MyUploadPicList 是上传的一系列图片信息   包括文件总大小等等

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package utils; public class MyUploadPic { String name; int size; String url; String thumbnailUrl; String deleteUrl; String deleteType; String error; public MyUploadPic(){ } public MyUploadPic(String name, int size, String url, String thumbnailUrl, String deleteUrl, String deleteType,String error) { super(); this.name = name; this.size = size; this.url = url; this.thumbnailUrl = thumbnailUrl; this.deleteUrl = deleteUrl; this.deleteType = deleteType; this.error=error; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getThumbnailUrl() { return thumbnailUrl; } public void setThumbnailUrl(String thumbnailUrl) { this.thumbnailUrl = thumbnailUrl; } public String getDeleteUrl() { return deleteUrl; } public void setDeleteUrl(String deleteUrl) { this.deleteUrl = deleteUrl; } public String getDeleteType() { return deleteType; } public void setDeleteType(String deleteType) { this.deleteType = deleteType; } public String getError() { return error; } public void setError(String error) { this.error = error; } }

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
package utils; import java.util.List; public class MyUploadPicList { public MyUploadPicList(){ } List<MyUploadPic> files; public List<MyUploadPic> getFiles() { return files; } public void setFiles(List<MyUploadPic> files) { this.files = files; } }

 

 

转载于:https://www.cnblogs.com/cart55free99/p/3503795.html

最后

以上就是奋斗冥王星最近收集整理的关于jQuery File Upload blueimp with struts2 简单试用的全部内容,更多相关jQuery内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部