利用plupload插件实现多文件上传,实现图片:

在jsp写入js代码:

z<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%> <html>
<head><title>test</title> <style type="text/css">@import url(plupload/js/jquery.plupload.queue/css/jquery.plupload.queue.css);</style>
<script src="js/jquery-1.6.2.min.js" type="text/javascript"></script>
<script type="text/javascript" src="plupload/js/plupload.full.js"></script>
<script type="text/javascript" src="plupload/js/jquery.plupload.queue/jquery.plupload.queue.js"></script>
<script type="text/javascript" src="plupload/js/i18n/cn.js"></script>
<script type="text/javascript">
// Convert divs to queue widgets when the DOM is ready
$(function() {
$("#uploader").pluploadQueue({
// General settings
runtimes : 'gears,flash,silverlight,browserplus,html5,html4',
url : 'FileUpload.action',
max_file_size : '10mb',
unique_names : true,
multiple_queues : true,
chunk_size: '2mb',
// Specify what files to browse for
filters : [
{title : "xls, xlsx文档", extensions : "xls,xlsx"}
], // Flash settings
flash_swf_url : 'plupload/js/plupload.flash.swf',
// Silverlight settings
silverlight_xap_url : 'plupload/js/plupload.silverlight.xap'
});
$('form').submit(function(e) {
var uploader = $('#uploader').pluploadQueue();
if (uploader.files.length > 0) {
// When all files are uploaded submit form
uploader.bind('StateChanged', function() {
if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
$('form')[0].submit();
}
});
uploader.start();
} else {
alert('请先上传数据文件.');
}
return false;
});
}); </script> </head> <body>
<div>
<div style="width: 750px; margin: 0px auto">
<form id="formId" action="Submit1.action" method="post">
<div id="uploader">
<p>您的浏览器未安装 Flash, Silverlight, Gears, BrowserPlus 或者支持 HTML5 .</p>
</div>
<input type="submit" value="完成"/>
</form>
</div>
</div>
</body> </html>

注:js,css引用路径需修改为自己项目路径。

FileAction文件上传类:

package com.action;

import java.io.*;
import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport; public class FileAction extends ActionSupport { /**
*
*/
private static final long serialVersionUID = 1L; private static final int BUFFER_SIZE = 2 * 1024; private int id = -1; private File upload;
private String name;
private List<String> names;
private String uploadFileName;
//文件类型
private String uploadContentType;
//大文件上传 分块chul
private int chunk;
private int chunks; private String result; private void copy(File src, File dst) {
InputStream in = null;
OutputStream out = null;
try {
if (dst.exists()) {
out = new BufferedOutputStream(new FileOutputStream(dst, true),
BUFFER_SIZE);
} else {
out = new BufferedOutputStream(new FileOutputStream(dst),
BUFFER_SIZE);
}
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE); byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} public String upload() throws Exception { String dstPath = ServletActionContext.getServletContext().getRealPath(
"resources\\files")
+ "\\" + this.getName();
File dstFile = new File(dstPath); // 文件已存在(上传了同名的文件)
if (chunk == 0 && dstFile.exists()) {
dstFile.delete();
dstFile = new File(dstPath);
} copy(this.upload, dstFile);
System.out.println("上传文件:" + uploadFileName + " 临时文件名:" + uploadContentType + " "
+ chunk + " " + chunks);
if (chunk == chunks - 1) {
// 完成一整个文件;
} return "success";
} public String submit() {
String filePath = ServletActionContext.getServletContext().getRealPath(
"resources\\files");
System.out.println("保存文件路径: " + filePath); HttpServletRequest request = ServletActionContext.getRequest(); result = "";
int count = Integer.parseInt(request.getParameter("uploader_count"));
for (int i = 0; i < count; i++) {
uploadFileName = request.getParameter("uploader_" + i + "_name");
name = request.getParameter("uploader_" + i + "_tmpname");
System.out.println(uploadFileName + " " + name);
try {
//do something with file;
result += uploadFileName + "导入完成. <br />";
} catch(Exception e) {
result += uploadFileName + "导入失败:" + e.getMessage() + ". <br />";
e.printStackTrace();
}
}
return "success";
} public void setId(int id) {
this.id = id;
} public int getId() {
return id;
} public void setName(String name) {
this.name = name;
} public String getName() {
return name;
} public void setNames(List<String> names) {
this.names = names;
} public List<String> getNames() {
return names;
} public File getUpload() {
return upload;
} public void setUpload(File upload) {
this.upload = upload;
} public String getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} public String getUploadContentType() {
return uploadContentType;
} public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
} public int getChunk() {
return chunk;
} public void setChunk(int chunk) {
this.chunk = chunk;
} public int getChunks() {
return chunks;
} public void setChunks(int chunks) {
this.chunks = chunks;
} public void setResult(String result) {
this.result = result;
} public String getResult() {
return result;
} }

struts.xml代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.multipart.maxSize" value="1073741824" />
<!-- 设置Web应用的默认编码集为gbk -->
<constant name="struts.i18n.encoding" value="utf-8"/>
<!-- 设置Web应用的默认Locale为zh_CN -->
<constant name="struts.locale" value="zh_CN" />
<!-- 设置Struts2应用的国际化资源文件,多个文件中间可用逗号分隔 -->
<constant name="struts.custom.i18n.resources" value="messageResource"/>
<!-- 设置Struts2应用是否处于开发模式,通常在开发调试阶段设为true,正式上线后可设为false -->
<constant name="struts.devMode" value="true" />
<!-- 设置Struts2的默认主题为simple -->
<constant name="struts.ui.theme" value="simple" />
<package name="struts" extends="struts-default" namespace="/">
<action name="FileUpload" class="com.action.FileAction" method="upload">
<result name="success">/result.jsp</result>
</action>
<action name ="Submit1" class ="com.action.FileAction" method="submit">
<param name="savePath">/resources/files</param>
<result name ="success">/result.jsp</result>
</action >
</package> </struts>

欢迎大家提出问题,共同讨论。

struts2多文件上传(带进度条)demo+说明的更多相关文章

  1. atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

    atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7 1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传 ...

  2. atitit. 文件上传带进度条 atiUP 设计 java c# php

    atitit. 文件上传带进度条 atiUP 设计 java c# php 1. 设计要求 1 2. 原理and 架构 1 3. ui 2 4. spring mvc 2 5. springMVC.x ...

  3. Struts2文件上传带进度条,虽然不是很完美

    好久没有写东西,最近在做个项目,要用到文件h 传的,以前虽然也做上传,但是总觉得不好用 ,现在和队友合作做了一个带进度条的上传,觉得还行~~和大家分享一下. 首先说一下大概是这样实现的,在我们平时的上 ...

  4. springMVC+ajax 文件上传 带进度条

    前端代码: <form id= "uploadForm"> <p >指定文件名: <input type="text" name= ...

  5. Flex4/Flash多文件上传(带进度条)实例分享

    要求 必备知识 本文要求基本了解 Adobe Flex编程知识和JAVA基础知识. 开发环境 MyEclipse10/Flash Builder4.6/Flash Player11及以上 演示地址 演 ...

  6. Springboot 文件上传(带进度条)

    1. 相关依赖 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...

  7. HTML5 + AJAX ( jQuery版本 ) 文件上传带进度条

    页面技术:HTML5 + AJAX ( jQuery) 后台技术:Servlet 3.0 服务器:Tomcat 7.0 jQuery版本:1.9.1 Servlet 3.0 代码 package or ...

  8. php实现大文件上传带进度条

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...

  9. html5 文件上传 带进度条

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. MVC5 属性路由

    属性路由(attribute routing)是最新被引进到MVC5中的,它和传统路由共同组成了mvc5中的两种主要路由. 1. 高质量的url应该满足以下几点 域名便于记忆和拼写 简短 便于输入 可 ...

  2. OC4_遵守多个协议

    // // Calulator.h // OC4_遵守多个协议 // // Created by zhangxueming on 15/6/24. // Copyright (c) 2015年 zha ...

  3. Linux开机启动程序详解[转]

    Linux开机启动程序详解 我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤 ...

  4. mysql之触发器before和after的区别(2)

    我们先做个测试: 接上篇日志建的商品表g和订单表o和触发器 假设:假设商品表有商品1,数量是10: 我们往订单表插入一条记录: insert into o(gid,much) values(1,20) ...

  5. BMP文件格式分析

    前两天要做一个读取bmp文件的小程序,顺便查找了一些关于BMP格式的文章,现在post上来. 简介 BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运 ...

  6. Mac OS + Nginx + Mysql + PHP 本地环境搭建

    本文是用Mac系统下搭建的环境,使用Linux的童鞋也不要在意,因为很相似,只有下载安装的方式有一点区别.直接进入正文: 1.首先我们需要下载Homebrew,Homebrew简称brew,是Mac ...

  7. Sigma.js

    http://www.cnblogs.com/kingboy2008/p/6117741.html

  8. jar 命令打war包

    假定有一个Web应用:C:\myHomemyHome/WEB-INF/……myHome/files/……myHome/image/……myHome/src/……myHome/index.jsp在命令行 ...

  9. jquery-easyui中datagrid扩展,隐藏显示表头功能

    今天,后台中需要新增一个功能,用户可以自由选择显示的列,之后保存到本地localStroage中.所以扩展了easyui中datagrid的onHeaderContextMenu方法. 使用方法: _ ...

  10. 加载驱动模块时Device or resource busy的解决方法

    加载驱动模块时Device or resource busy的解决方法 加载驱动模块时Device or resource busy的解决方法 insmod或modprobe驱动模块时Device o ...