多个文件上传

Posted 杨荣林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个文件上传相关的知识,希望对你有一定的参考价值。

//准备文件

1.上传多个文件页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>登录页面</title>

  </head>
  
  <body>
   <s:form action="upload.action" enctype="multipart/form-data" method="post">
        <s:file name="upload" label="选择文件" />
		<br />
		<s:file name="upload" label="选择文件" />
		<br />
		<s:file name="upload" label="选择文件" />
		<br />
		<s:submit name="submit" value="上传文件"></s:submit>
   </s:form>
  </body>
</html>

  2.在struts.xml中配置相应的action

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC 
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<!-- 动态方法调用 -->
 
    <constant name="struts.devMode" value="false" />
    
    
    <package name="default" namespace="/" extends="struts-default">
    	
        <action name="upload" class="cn.happy.action.UploadAction" method="execute">
        	<param name="savePath">/image</param>
           <result name="success">/upload/success.jsp</result>
        </action>
    </package>
</struts>

 3.在根据action节点找对应的类

package cn.happy.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
	/***
	 * 多文件上传
	 * @return
	 */
	// 上传文件的属性
		private File[] upload;
		// 上传文件的类型
		private String[] uploadContentType;
		// 上传文件的名称
		private String[] uploadFileName;
		// 上传文件的地址
		private String savePath;
		
		@Override	
		public String execute() throws Exception{
			byte[] buffer=new byte[1024];
			for(int i=0;i<upload.length;i++){
				//建立上传文件的出入流
				FileInputStream fis=new FileInputStream(getUpload()[i]);
				//建立上传文件的输出流, getImageFileName()[i]
				FileOutputStream fos=new FileOutputStream(getSavePath()+"\\"+getUploadFileName()[i]);
			    int length=fis.read(buffer);
			    while(length>0){
			    	fos.write(buffer,0,length);
			    	length=fis.read(buffer);
			    }
			    fis.close();
				fos.flush();
				fos.close();
			}
			
			return SUCCESS;
		}
	
		public File[] getUpload() {
			return upload;
		}
		public void setUpload(File[] upload) {
			this.upload = upload;
		}
		
		public String[] getUploadContentType() {
			return uploadContentType;
		}
		public void setUploadContentType(String[] uploadContentType) {
			this.uploadContentType = uploadContentType;
		}
		
		
		public String[] getUploadFileName() {
			return uploadFileName;
		}
		public void setUploadFileName(String[] uploadFileName) {
			this.uploadFileName = uploadFileName;
		}
		
		public String getSavePath() {
			return ServletActionContext.getServletContext().getRealPath(savePath);
		}
		public void setSavePath(String savePath) {
			this.savePath = savePath;
		}
}

4.如果成功就去找成功页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>成功页面</title>
  </head>
  
  <body>
       您所上传的文件是:<s:property value="uploadFileName"/><br/>
	文件类型:<s:property value="uploadContentType"/>
  </body>
</html>

  

 

 

 

 

 

以上是关于多个文件上传的主要内容,如果未能解决你的问题,请参考以下文章

大文件上传下载实现思路,分片断点续传代码实现,以及webUpload组件

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”

如何使用Paperclip在Rails 4中上传多个图像

将存储在内存中的文件上传到s3

大文件上传下载分片断点续传教程

JS创建文件并上传服务器