java多文件上传

自己遇到这样的东西 先大概写了一个模型

用的swfupload+struts

或者单独的 swfupload +serverlet



具体的代码 请见:java多文件上传代码

 文件在程序中的位置具体如下:

点击查看

必须的包:lib里面的包都是必须的。

索要引用的js 有 jquery和 handlers(主要就是控制文件上传的一些js)和swfupload 和一个必要的flash swupload 这些 官网都有地址是:swfupload。里面也有详细的讲解。



先说  struts的这一种,现在用struts的比较多:

首先建立 Uploadfile文件

package com;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Timestamp;

import javax.servlet.ServletContext;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.struts2.ServletActionContext;



import com.opensymphony.xwork2.ActionSupport;

public class UploadFile extends ActionSupport {
	
	private String message ;

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	
	private File files;
	
	private String filesFileName;
	
	private String filesContentType ;
	
	public File getFiles() {
		return files;
	}

	public void setFiles(File files) {
		this.files = files;
	}

	public String getFilesFileName() {
		return filesFileName;
	}

	public void setFilesFileName(String filesFileName) {
		this.filesFileName = filesFileName;
	}

	public String getFilesContentType() {
		return filesContentType;
	}

	public void setFilesContentType(String filesContentType) {
		this.filesContentType = filesContentType;
	}

	 
	public String getInfo(){
		setMessage("linlin");
		return SUCCESS;
	}
	
	/****
	 * swf上传. 文件名字没有改变
	 */
	 public String swfUpload1() throws Exception {
		 
	        // 实现上传
	        InputStream is = new FileInputStream(files);
	        /**获取路径**/
	        String root =ServletActionContext.getServletContext().getRealPath("");
	        /**分隔符**/
			String separator = java.io.File.separator;
			/**存储路径**/
			String path = root+separator+"upload" +separator+"file"+separator;
			System.out.println("---上传文件地址---"+path);
			//获取时间戳
			long time = System.currentTimeMillis();
	        File deskFile = new File(root, this.getFilesFileName());
	        System.out.println("--文件名字--"+this.getFilesFileName());
	        OutputStream os = new FileOutputStream(deskFile);
	        byte[] bytefer = new byte[1024];
	        int length = 0;
	        while ((length = is.read(bytefer)) != -1) {
	            os.write(bytefer, 0, length);
	        }
	        os.close();
	        is.close();
	        return "success";
	    }
	 	/****
		 * 使用FileUtils.copyFile的上传
		 * @return
		 */
		public String loadFile(){
			/**当前时间戳**/
			Timestamp currentTime = new Timestamp(System.currentTimeMillis());
			ServletContext servletContext = ServletActionContext.getServletContext(); 
			/**获取路径**/
		    String dataDir = servletContext.getRealPath(""); 
			long time = System.currentTimeMillis();
			/**分隔符**/
			String separator = java.io.File.separator;
			/**判断上传文件是否为空**/
			if(null == files){
				/**若文件为空 则 报错**/
				return "文件为空!";
			}else{
				// 判断数据是否正确
				// 文件后缀名
				int index = StringUtils.lastIndexOf(filesFileName, '.');
				if (index == -1) {
					return "文件类型错误!";
				}
				/**获取文件后缀名**/
				String extFileName = StringUtils.substring(filesFileName, index + 1);
				/**定义上传位置**/
				String path = dataDir+separator+"upload" +separator+"file"+separator;
				System.out.println("---文件上传位置---"+path);
				/**使用当前时间戳,避免文件重复被覆盖**/
				String name = time+"";
				String filename = path + name + "." + extFileName.toLowerCase();;
				System.out.println("---文件名称---"+name);
				File destFile = new File(filename);
				try {
					/**上传文件 用FileUtils**/
					FileUtils.copyFile(files, destFile);
				} catch (IOException e) {
					e.printStackTrace();
					
					return "附件上传失败!";
				}
				
			}
	         return SUCCESS;
		}
		
	 /****
	  *  
	  * 使用IO 流
	  * @return
	  * @throws IOException
	  */
	public String  swfUpload() throws IOException{
		if(null == files){
			/**若文件为空 则 报错**/
			return "文件为空!";
		}else{
			// 判断数据是否正确
			// 文件后缀名
			int index = StringUtils.lastIndexOf(filesFileName, '.');
			if (index == -1) {
				return "文件类型错误!";
			}
			/**获取文件后缀名**/
			String extFileName = StringUtils.substring(filesFileName, index + 1);
			 /**分隔符**/
			String separator = java.io.File.separator;
			/**定义上传位置**/
	        String root =ServletActionContext.getServletContext().getRealPath("");
			String path = root+separator+"upload" +separator+"file"+separator;
			System.out.println("---文件上传位置---"+path);
			/**使用当前时间戳,避免文件重复被覆盖**/
			long time = System.currentTimeMillis();
			String name = time+"";
			String filename = path + name + "." + extFileName.toLowerCase();
	        File deskFile = new File(filename);
			System.out.println("---文件名称---"+name);
			InputStream is = new FileInputStream(files);
	        OutputStream os = new FileOutputStream(deskFile);
	        byte[] bytefer = new byte[1024];
	        int length = 0;
	        while ((length = is.read(bytefer)) != -1) {
	            os.write(bytefer, 0, length);
	        }
	        os.close();
	        is.close();
	        return "success";
		}
	 
	}
}

struts.xml的配置:

<package name="uploadfile" extends="struts-default" namespace="/">
		<action name="getinfo" class="com.UploadFile" method="getInfo">
			<result name="success">/upload.jsp</result>
		</action>
		<action name="uploadfile" class="com.UploadFile" method="loadFile">
			<result name="success">/upload.jsp</result>
		</action>
		<action name="swfuploadfile" class="com.UploadFile" method="swfUpload">
			<result name="success">/upload.jsp</result>
		</action>
		<!--删除附件-->
		<action name="deletefile" class="com.deletFile" method="delFile">
			<result name="success">/upload.jsp</result>
		</action>
	</package>

上传页面

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <script type="text/javascript" src="swfupload/swfupload.js"></script>
  <script type="text/javascript" src="swfupload/handlers.js"></script>
  <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
  <body style="font-size: 12px;">
   <script type="text/javascript">
			var swfu;
			window.onload = function () {
				swfu = new SWFUpload({
					upload_url: "swfuploadfile.action" //上传文件需要请求的url,
					
					// File Upload Settings
					file_size_limit : "50 MB",	// 1000MB
					file_types : "*.*",//设置可上传的类型
					file_types_description : "所有文件",
					file_upload_limit : "10",
	                file_post_name: "files",//相当于页面的name属性
					
					file_queue_error_handler : fileQueueError,//选择文件后出错
					file_dialog_complete_handler : fileDialogComplete,//选择好文件后提交
					file_queued_handler : fileQueued,
					upload_progress_handler : uploadProgress,
					upload_error_handler : uploadError,
					upload_success_handler : uploadSuccess,
					upload_complete_handler : uploadComplete,
	
					// Button Settings
					button_image_url : "images/SmallSpyGlassWithTransperancy_17x18.png",
					button_placeholder_id : "spanButtonPlaceholder",
					button_width: 100,
					button_height: 18,
					button_text : '<span class="button">添加附件</span>',
					button_text_style : '.button { font-family: Helvetica, Arial, sans-serif; font-size: 12pt; } .buttonSmall { font-size: 10pt; }',
					button_text_top_padding: 0,
					button_text_left_padding: 18,
					button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
					button_cursor: SWFUpload.CURSOR.HAND,
					
					// Flash Settings
					flash_url : "swfupload/swfupload.swf",
	
					custom_settings : {
						upload_target : "divFileProgressContainer"
					},
					// Debug Settings
					debug: false  //是否显示调试窗口
				});
			};
			function startUploadFile(){
				swfu.startUpload();
			}

		</script>
		<!--  -->
		<span id="spanButtonPlaceholder"></span>
		  <div id="divFileProgressContainer" style="width:200;display:none;"></div>
		<div id="thumbnails">
				<table id="infoTable" border="0" width="50%" style="border: solid 1px #7FAAFF; background-color: #C5D9FF; padding: 2px;margin-top:8px;">
				</table>
			</div>
  </body>
</html>

这个效果是这样的选择一个文件自动上传一个文件:



然后 可以一次性选择完进行上传:

swfUpload.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  <script type="text/javascript" src="swfupload/swfupload.js"></script>
  <script type="text/javascript" src="swfupload/handlers.js"></script>
  <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
  <body style="font-size: 12px;">
   <script type="text/javascript">
			var swfu;
			var index = 1;
			window.onload = function () {
				swfu = new SWFUpload({
					upload_url: "swfuploadfile.action",//要请求的action名字
					
					// File Upload Settings
					file_size_limit : "50 MB",	// 1000MB
					file_types : "*.*",//设置可上传的类型
					file_types_description : "所有文件",
					file_upload_limit : "10",
					 //上传文件的名称
	                file_post_name: "files",//相当于页面的name属性
	                			
					file_queue_error_handler : fileQueueError,//选择文件后出错
					file_dialog_complete_handler : fileDialogComplete,//用于处理选择文件后出发的事件
					file_queued_handler : fileQueued,
					upload_progress_handler : uploadProgress,
					upload_error_handler : uploadError,//上传文件失败触发的事件
					upload_success_handler : uploadSuccess,//上传文件成功触发的事件
					upload_complete_handler : uploadComplete,//用于处理文件上传结束之后的事件
	
					// Button Settings
					button_image_url : "images/SmallSpyGlassWithTransperancy_17x18.png",//指向button图片额的地址
					button_placeholder_id : "spanButtonPlaceholder",//button的iD
					button_width: 100,//button的宽度
					button_height: 18,//button的高度
					button_text : '<span class="button">添加附件</span>',//button里面的文字
					button_text_style : '.button { font-family: Helvetica, Arial, sans-serif; font-size: 12pt; } .buttonSmall { font-size: 10pt; }',
					button_text_top_padding: 0,
					button_text_left_padding: 18,
					button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
					button_cursor: SWFUpload.CURSOR.HAND,
					
					// Flash Settings
					flash_url : "swfupload/swfupload.swf",//flash的地址
	
					custom_settings : {
						upload_target : "divFileProgressContainer"
					},
					// Debug Settings
					debug: false  //是否显示调试窗口
				});
			};
			function uploadComplete(file){//continue to  upload next file
				swfu.startUpload();  
			}
			function fileDialogComplete(numFilesSelected ,numFilesQueued,numFilesinQueue){

				var table = document.getElementById("filesTable");
				table.style.display="block";
			}
			function fileQueued(file){
				var table = document.getElementById("filesTable");
				var row = table.insertRow();
				var col1= row.insertCell();
				var col2= row.insertCell();
				var col3= row.insertCell();
				var col4= row.insertCell();
				row.id = file.id;
				
				col4.id=index;
				col1.innerHTML = file.name; 
				col2.innerHTML = file.size;
				col3.innerHTML = showStatus(file.filestatus);
				col4.innerHTML = "<input type='button' value = '删除'οnclick='deleteRow("+index+")'/>";
				index++;
				}
			function showStatus(status){

				var word ;
				switch(status){
				case  SWFUpload.FILE_STATUS.QUEUED:
				  word="queued";
				  break;
				case  SWFUpload.FILE_STATUS.ERROR:
				  word="ERROR";
				  break;
				case  SWFUpload.FILE_STATUS.COMPLETE:
				  word="COMPLETE";
				  break;
				}
				return word;
				}

			function uploadSuccess(file){
				var row = document.getElementById(file.id);
				row.cells[2].innerHTML=showStatus(file.filestatus);
			}
			function uploadError(file){
				var row = document.getElementById(file.id);
				row.cells[2].innerHTML=showStatus(file.filestatus);
				}
			function startUploadFile(){
				swfu.startUpload();
			}
			function deleteRow(obj) { 
				 var x=document.getElementById(obj);   
				x.parentNode.parentNode.removeChild(x.parentNode);

			} 
		 
		</script>
		<!--  -->
		<span id="spanButtonPlaceholder"></span>
		<div >
		<table id="filesTable" border="0" width="50%" style="display: none">
			<tr>
			<td>name</td>
			<td>size</td>
			<td>status</td>
			<td>del</td>
			</tr>
		</table>
		<div>
		<button οnclick="startUploadFile()">上传</button>
  </body>
</html>
效果是这样的:



然后点击上传 一次性上传这些文件,其实 看上去是一次性上传的,其实是一个一个激动上传的,等于是系统自动调用了后台三次。


删除以后再说,



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值