Struts多文件上传与下载

目录

单文件上传 

上传多文件

文件自动扫描下载


 

单文件上传 

首先在页面

<!-- Struts2的文件上传标签 -->
	<s:form action="FileUpAction" namespace="/" method="POST"
		enctype="multipart/form-data">
		<s:file name="fileUpload" label="浏览文件" size="40" />
		<s:submit value="submit" name="上传" />
	</s:form>

action

package com.bdqn.action;

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

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport{
	private File fileUpload;
	private String fileUploadFileName;
	
	public String fileUp() throws Exception {
		System.out.println(fileUpload);
		FileInputStream fis = new FileInputStream(fileUpload);
		File file = new File("D://Tomcat//apache-tomcat-8.5.31//webapps//上传文件Struts//file//"+fileUploadFileName);
		if (file.exists()) {
			file.createNewFile();
		}
		FileOutputStream os = new FileOutputStream(file);
		byte[] bb = new byte[1024];
		while (fis.read(bb)!=-1) {
			os.write(bb);
			os.flush();
		}
		return SUCCESS;
	}

	public File getFileUpload() {
		return fileUpload;
	}

	public void setFileUpload(File fileUpload) {
		this.fileUpload = fileUpload;
	}

	public String getFileUploadFileName() {
		return fileUploadFileName;
	}

	public void setFileUploadFileName(String fileUploadFileName) {
		this.fileUploadFileName = fileUploadFileName;
	}
	
}

上传多文件

就是在单文件的基础上把单个属性变为数组

<!-- Struts2的文件上传标签 -->
	<s:form action="FileUpAction" namespace="/" method="POST"
		enctype="multipart/form-data">
		<s:file name="fileUpload" label="浏览文件" size="40" />
		<s:file name="fileUpload" label="浏览文件" size="40" />
		<s:file name="fileUpload" label="浏览文件" size="40" />
		<s:submit value="submit" name="上传" />
	</s:form>
package com.bdqn.action;

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

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport{
	private File[] fileUpload;
	private String[] fileUploadFileName;
	
	public String fileUp() throws Exception {
		for (int i = 0; i < fileUpload.length; i++) {
			System.out.println(fileUpload);
			FileInputStream fis = new FileInputStream(fileUpload[i]);
			File file = new File("D://Tomcat//apache-tomcat-8.5.31//webapps//上传文件Struts//"+fileUploadFileName[i]);
			if (file.exists()) {
				file.createNewFile();
			}
			FileOutputStream os = new FileOutputStream(file);
			byte[] bb = new byte[1024];
			while (fis.read(bb)!=-1) {
				os.write(bb);
				os.flush();
			}
		}
		return SUCCESS;
	}

	public File[] getFileUpload() {
		return fileUpload;
	}

	public void setFileUpload(File[] fileUpload) {
		this.fileUpload = fileUpload;
	}

	public String[] getFileUploadFileName() {
		return fileUploadFileName;
	}

	public void setFileUploadFileName(String[] fileUploadFileName) {
		this.fileUploadFileName = fileUploadFileName;
	}
	
}

文件自动扫描下载

package com.bdqn.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import com.opensymphony.xwork2.ActionSupport;

public class Fileload extends ActionSupport{
	//用来存储文件
	private File[] files = new File[100];
	//用来存储文件名字
	private String[] fileName = new String[100];
	//用来存储文件个数,用来遍历
	private List<Integer> list = new ArrayList<Integer>();

	//页面返回的文件地址,用于下载
	private String fileinfo;
	//用来记录名字
	private String name;

	//查询文件的个数和下载地址,存储起来输出到页面
	public String load() throws Exception {
		//获取项目底下file的所有文件
		File file = new File("D://Tomcat//apache-tomcat-8.5.31//webapps//上传文件Struts//file");
		//假如页面存在
		if (file.exists()) {
			//获取该文件夹底下的所有的文件和目录
			File[] tempList = file.listFiles();
			//循环遍历确定是不是文件,或者是不是目录
			for (int i = 0; i < tempList.length; i++) {
				if (tempList[i].isFile()) {
					//如果文件就加入如文件数组
					files[i] = tempList[i];
					//同时获取该问文件的名字
					fileName[i] = tempList[i].getName();
					//为数组的长度进行标记,等下在页面进行遍历也是靠它
					list.add(i);
				}
			}
		}
		return SUCCESS;
	}

	public String xiazai() throws Exception {
		//读入文件地址
		File file = new File(fileinfo);
		//读入流
		FileInputStream is= new FileInputStream(file);
		//接受容器
		File file2 = new File("J://"+name);
		//写出流
		FileOutputStream fis = new FileOutputStream(file2);
		//缓冲区
		byte[] bb = new byte[1024];
		while (is.read(bb)!=-1) {
			fis.write(bb);
			fis.flush();
		}
		return SUCCESS;
	}


	public List<Integer> getList() {
		return list;
	}
	public void setList(List<Integer> list) {
		this.list = list;
	}

	public File[] getFiles() {
		return files;
	}
	public void setFiles(File[] files) {
		this.files = files;
	}
	public String[] getFileName() {
		return fileName;
	}
	public void setFileName(String[] fileName) {
		this.fileName = fileName;
	}

	public String getFileinfo() {
		return fileinfo;
	}

	public void setFileinfo(String fileinfo) {
		this.fileinfo = fileinfo;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}
<!-- 文件遍历方法 -->
		<action name="loadAction" class="com.bdqn.action.Fileload" method="load">
			<result name="success">/loadfile.jsp</result>
		</action>
		<!-- 文件下载类 -->
		<action name="xiazaiAction" class="com.bdqn.action.Fileload" method="xiazai">
			<result name="success">/success.jsp</result>
		</action>

页面代码,和action是关联的

<table border="2">
		<tr>
			<td>文件名</td>
			<td>下载</td>
		</tr>
		<c:forEach items="${list}" var="li" varStatus="str">
			<tr>
				<td>${fileName[li]}</td>
				<td>
					<form action="/上传文件Struts/Fileload/xiazaiAction">
						<input type="hidden" name="fileinfo" value="${files[li]}">
						<input type="hidden" name="name" value="${fileName[li]}">
						<input type="submit" value="下载">
					</form></td>
			</tr>
		</c:forEach>
	</table>
<body>
   	<a href="fileUp.jsp">上传文件</a>
    <a href="/上传文件Struts/Fileload/loadAction">下载文件网页</a>
  </body>

下载的第二种方法

<a href="${pageContext.request.contextPath}/file/${fileName[li]}" download="">下载</a>

获得当前项目名字

${pageContext.request.contextPath}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值