一 文件上传

1.环境要求

commons-fileupload-xxx.jar

commons-io-xxx.jar

2.准备jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="Fileupload" method="" enctype="multipart/form-data">
<s:textfield name="title" label="用户名"/><br>
<s:file name="upload" label="上传文件"/><br>
<s:submit name="submit" value="上传" />
</s:form>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<s:form action="FileuploadMore" method="post" enctype="multipart/form-data">
<s:textfield name="title" label="用户名"/><br>
<s:file name="upload" label="上传文件"/><br>
<s:file name="upload" label="上传文件"/><br>
<s:file name="upload" label="上传文件"/><br>
<s:file name="upload" label="上传文件"/><br>
<s:submit name="submit" value="上传" />
</s:form>
</body>
</html>

3.Action页面

package com.icss.action.upload;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; /**
***************************
*@类名 UploadAction.java public class UploadAction extends ActionSupport{ //1.普通字段name属性名
private String title;
private File upload;//file 控件名 它要和表单name属性和action属性名要一致
//2.控件名+ContentType
private String uploadContentType;//上传文件的类型
//3.控件名+FileName
private String uploadFileName;//上传文件的名称
//4.上传文件的路径 upload
private String savePath; //获取完整的路径 //上传
public String execute() throws Exception {
byte[] buffer = new byte[2048];//缓冲区
//输入流
FileInputStream fis = new FileInputStream(upload);
//输出流 \ \
FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+uploadFileName);
int len=fis.read(buffer);
while(len>0){
fos.write(buffer, 0, len);
len=fis.read(buffer);
}
fos.flush();
fos.close();
fis.close();
return "success"; } //生成get和set方法
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
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;
} }
public class UploadMoreAction extends ActionSupport{
//file 控件 name 属性和action属性名要一致
//1.普通字段name属性名
private String title;
private File[] upload;
//2.控件名+ContentType
private String[] uploadContentType;//上传文件的类型
//3.控件名+FileName
private String[] uploadFileName;//上传文件的名称
//4.上传文件的路径 upload
private String savePath; //获取完整的路径 //上传
public String execute() throws Exception {
byte[] buffer = new byte[2048];//缓冲区
for(int i=0;i<upload.length;i++){
//输入流
FileInputStream fis = new FileInputStream(upload[i]);
//输出流 \ \
FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+uploadFileName[i]);
int len=fis.read(buffer);
while(len>0){
fos.write(buffer, 0, len);
len=fis.read(buffer);
}
fos.flush();
fos.close();
fis.close(); }
return "success";
} public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
} public String getSavePath() {
return ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
} 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;
}

4.配置struts.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="false"/>
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<constant name="struts.configuration.xml.reload" value="true"/>
<package name="upload" namespace="/" extends="struts-default">
<!-- 单文件上传 -->
<action name="Fileupload" class="com.icss.action.upload.UploadAction">
<param name="savePath">/upload</param>
<result name="success">/upload_success.jsp</result>
</action>
<!-- 多文件上传配置 -->
<action name="FileuploadMore" class="com.icss.action.upload.UploadMoreAction">
<param name="savePath">/upload</param>
<result name="success">/upload_success.jsp</result>
</action>
<!-- 下载文件 -->
<action name="download" class="com.icss.action.upload.downloadAction">
<param name="inputPath">/upload</param>
<result name="success" type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputname">inputStream</param>
<param name="contentDisposition">
attachment;filename="${fileName}"
</param>
<param name="bufferSize">4096</param>
</result>
</action> </package>
</struts>

File类型的xxx属性,与表单中的File控件的name属性一致,用于封装File控件对应的文件内容

String类型的xxxFileName属性,该属性名称就是前面的File类型属性+FileName组合而成,是固定的语法,作用就是封装File控件对应文件的文件名

String类型的xxxContentType属性,同样也是xxx属性+ContentType组合而成,固定语法,作用就是封装File控件对应文件的文件类型

在Action中设置了这三个属性,在执行上传时就可以直接通过getXxx()方法来获取到上传文件的文件名、类型及文件内容。

而实现文件上传的过程就是使用流实现文件读取的过程,

二 文件下载

jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="download?fileName=head.jpg">下载此图片</a>
</body>
</html>

2.Action

public class downloadAction extends ActionSupport {
//下载路劲
private String inputPath;
//下载文件名
private String fileName;
//读取下载文件的流
private InputStream inputname;
//获取输入流
public InputStream getInputName() throws FileNotFoundException {
String path = ServletActionContext.getServletContext().getRealPath(inputPath);
return new BufferedInputStream(new FileInputStream(path+"\\"+fileName));
} public String getInputPath() {
return inputPath;
} public void setInputPath(String inputPath) {
this.inputPath = inputPath;
} public String getFileName() {
return fileName;
} public void setFilename(String fileName) {
this.fileName = fileName;
} public void setInputName(InputStream inputName) {
this.inputname = inputName;
} public String execute() throws Exception { return SUCCESS;
}
}

struts.xml在上面。

struts2文件上传(多文件)文件下载的更多相关文章

  1. struts2文件上传,文件类型 allowedTypes

    struts2文件上传,文件类型 allowedTypes 1 '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript ...

  2. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...

  3. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  4. webAPI文件上传时文件过大404错误的问题

    背景:最近公司有个需求,外网希望自动保存数据到内网,内网有2台服务器可以相互访问,其中一台服务器外网可以访问,于是想在 这台服务器上放个中转的接口.后来做出来以后测试发现没有问题就放线上去了,不顾发现 ...

  5. struts2实现文件上传(多文件上传)及下载

    一.要实现文件上传,需在项目中添加两个jar文件 二.上传准备的页面 注:必须植入enctype="multipart/form-data"属性,以及提交方式要设置成post &l ...

  6. Struts---多文件上传、单文件下载

    struts.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUB ...

  7. Struts2 单个文件上传/多文件上传

    1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...

  8. Struts2文件上传--多文件上传(插件uploadify)

    公司需要把以前的Struts2自带的图片上传替换掉,因为不能一个file选择多个文件,本人直接百度搜索图片插件,  貌似就它(uploadify3.2.1)在最前面,也找过很多案例, 其中有不少问题, ...

  9. [转]SpringMVC单文件上传、多文件上传、文件列表显示、文件下载

    一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+sta ...

  10. Struts2之文件上传(单文件/多文件)

    <一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...

随机推荐

  1. mysql tar安装模式

    mysql解压版安装过程,之前安装mysql一直用linux yum和rpm方式.今天试了下tar包方式有点麻烦记录下1.安装lrzsz-0.12.20-27.1.el6.x86_64.rpm方便操作 ...

  2. 记录装CDH新增加一些遇到问题的解决

    报错信息:MainThread agent ERROR Heartbeating to localhost:7182 failed.解决:配置CM Agentcm的安装包的server和agent都是 ...

  3. 搭建HDFS HA

    搭建HDFS HA 1.服务器角色规划 hd-01(192.168.1.99) hd-02 (192.168.1.100) hd-03 (192.168.1.101) NameNode NameNod ...

  4. Ajax加载数据的使用

    需求就是不能再进入页面时加载数据,只能在点击其中一个按钮时把数据加载呈现出来.具体效果如最下面的图. 1.前台页面 <h1 " onclick="GetData(1)&quo ...

  5. K8S之部署Dashboard

    转载声明 本文转载自:ASP.NET Core on K8S深入学习(2)部署过程解析与部署Dashboard 1.Yaml安装 下载yaml文件 wget https://raw.githubuse ...

  6. 5.从物理层到MAC层

    第一层(物理层)     如何用两台电脑构成最小的局域网(LAN)?     网线的水晶头1.2和3.6脚分别起着收.发信号的作用,随意只要将水晶头做交叉线1-3.2-6交叉法,然后连接两台电脑.除了 ...

  7. OrCAD(2) -- 编辑原理图库时的复制与粘贴

    大家都知道,OrCAD元器件的管脚编辑是基于Excel的,但是在编辑原理图库的管脚的时候,大家应该都有体会'ctrl+c' 和 'ctrl+v' 的命令是不能用的. 这是因为该两个命令在OrCAD中都 ...

  8. Date()日期转换和简单计算

    /** * 判断是否为闰年 * @param year * @return */ public boolean isLeap ( int year ) { if ( (year % 4 == 0 &a ...

  9. day23 内置函数,匿名函数,递归

    Python之路,Day11 = Python基础11 内置函数divmod(x, y)   # (商, 模)enumerate(可迭代对象)     # (序号,值)eval(字符串) # 把字符串 ...

  10. 树的直径+质因子——好题!cf1101D

    /* 因为质因子很少 状态转移时用dp[u][i]表示结点u的第i个质因子所在的最大深度即可 等价于带限制的求直径 */ #include<bits/stdc++.h> #include& ...