java之struts2之文件上传
1.在大多数应用中,都有文件上传功能。有两种文件上传的方式,一种是自己去解析http协议,获取文件上传的内容。另一种是通过第三方插件来实现文件上传。第三方插件一般有两种,smartfileupload(上传小文件效率比较好,没有更新),commons-fileupload。
2.在servlet中实现文件上传的步骤:
a) 导入jar包 commons-fileupload, common-io ;
b) 编写jsp 页面,表单提交必须是 post ,enctype="multipart/form-data"
<body>
<form action="fileupload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="name"/><br>
文件:<input type="file" name="file"/><input type="submit" value="上传"/>
</form>
</body
c) 编写servlet
@WebServlet("/fileupload")
public class FileUploadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//上传文件存放位置
String path = req.getServletContext().getRealPath("/upload");
//创建磁盘目录工厂 该工厂可以设置 临时文件大小,还可以设置临时目录
DiskFileItemFactory df = new DiskFileItemFactory();
//将目录绑定ServletFileUpload 类 这个类完成http协议的解析
ServletFileUpload upload=new ServletFileUpload(df);
try {
//解析req 返回所有表单项目目录
List<FileItem> list = upload.parseRequest(req);
for(FileItem item:list){
if(item.isFormField()){//正常表单项
String name=item.getFieldName();
String value=item.getString();
System.out.println(name+"======"+value);
}else{//文件上传项
String name=item.getName();
InputStream is = item.getInputStream();
OutputStream os = new FileOutputStream(new File(path,name));
byte[] buffer = new byte[400];
int len=0;
while((len=is.read(buffer))!=-1)
os.write(buffer, 0, len);
os.close();
is.close();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}
3. Struts2中已经将文件上传功能封装好了,不需要再像servlet一样,分别来自己编码实现。
实现步骤:
a) 编写 jsp 页面和 servlet 编写方式一样
<form action="upload.action" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"/><input type="submit" value="上传"/>
</form>
b) 编写处理上传文件的 Action
public class UploadAction {
//File的名称和表单域中的名称相同
private File file;
//获取文件名 文件名属性 必须是 表单域名+FileName;
private String fileFileName;
//获取文件的类型
private String fileContentType;
//上传的处理方法
public String upload(){
String path=ServletActionContext.getServletContext().getRealPath("/upload");
try {
FileUtils.copyFile(file, new File(path,fileFileName));
} catch (IOException e) {
e.printStackTrace();
}
return Action.SUCCESS;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
}
4.批量的文件上传实现
Action 的实现
public class BatchUploadAction {
//File的名称和表单域中的名称相同
private File[] file;
//获取文件名 文件名属性 必须是 表单域名+FileName;
private String[] fileFileName;
//获取文件的类型
private String[] fileContentType;
//上传的处理方法
public String upload(){
String path=ServletActionContext.getServletContext().getRealPath("/upload");
try {
for(int i=0;i<file.length;i++)
FileUtils.copyFile(file[i], new File(path,fileFileName[i]));
} catch (IOException e) {
e.printStackTrace();
}
return Action.SUCCESS;
}
public File[] getFile() {
return file;
}
public void setFile(File[] file) {
this.file = file;
}
public String[] getFileFileName() {
return fileFileName;
}
public void setFileFileName(String[] fileFileName) {
this.fileFileName = fileFileName;
}
public String[] getFileContentType() {
return fileContentType;
}
public void setFileContentType(String[] fileContentType) {
this.fileContentType = fileContentType;
}
}
Jsp
<script type="text/javascript" src="jquery-1.11.3.min.js"></script>
<script type="text/javascript">
$(function(){
$('#btn').click(function(){
var html=$("#content").html();
html+="文件:<input type='file' name='file'/><br>";
$("#content").html(html);
}); });
</script>
</head>
<body>
<form action="batch.action" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"/><input type="button" value="增加" id="btn"/><br>
<div id="content"></div>
<input type="submit" value="上传"/>
</form>
</body>
Struts.xml
<struts>
<!-- 设置上传文件大小的常量
maximumSize是单个文件大小
maxSize 上传总文件大小
maximunSize=20M maxSize=200M,说明一次可以上传10个20M大小的文件
-->
<constant name="struts.multipart.maxSize" value="209715200"></constant>
<package name="default" extends="struts-default" namespace="/">
<action name="upload" class="cn.sxt.action.UploadAction" method="upload">
<result>/success.jsp</result>
</action>
<action name="batch" class="cn.sxt.action.BatchUploadAction" method="upload">
<result>/success.jsp</result>
<interceptor-ref name="fileUpload">
<!-- 设置上传的单个文件大小 -->
<param name="maximumSize">20971520</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>
java之struts2之文件上传的更多相关文章
- struts2的文件上传
在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...
- jsp\struts1.2\struts2 中文件上传(转)
jsp\struts1.2\struts2 中文件上传 a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现c.在sturts2中实现现在把Code与大家 ...
- Struts2+Uploadify文件上传使用详解
Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例是php版本的,本文将详细介绍Uploadify在java中的使用,您也可以点击下面的链接进行演示或下 ...
- Struts2实现文件上传下载功能(批量上传)
今天来发布一个使用Struts2上传下载的项目, struts2为文件上传下载提供了好的实现机制, 首先,可以先看一下我的项目截图 关于需要使用的jar包,需要用到commons-fileupload ...
- Struts2实现文件上传(三)
Struts2实现文件上传 配置文件web.xml <?xml version="1.0" encoding="UTF-8"?> <web-a ...
- Struts2实现文件上传(二)
Struts2实现文件上传 文件上传页面 file.jsp: <%@ page language="java" import="java.util.*" ...
- Struts2实现文件上传(一)
Struts2实现文件上传 文件上传成功后结果页面 result.jsp: <%@ page language="java" import="java.util.* ...
- Struts2单文件上传原理及示例
一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里 ...
- struts2多文件上传-2
<!-- 多文件上传 --> <action name="UploadAction2_*" class="uploadfile.UploadAction ...
随机推荐
- vuex如何实现数据持久化,刷新页面存储的值还存在
1.安装: npm install vuex-persistedstate --save 2.找到store/index.js import Vue from 'vue' import Vuex fr ...
- shell 修改文件所有者
chown 用户名 文件名 -R
- 【cf补题记录】A. Hotelier
思考之后再看题解,是与别人灵魂之间的沟通与碰撞 A. Hotelier 题意 给出长度为n的字符串,字符串由'L'.'R'以及数字0~9组成.旅馆有10间房子,L代表客人从左边入住,R代表客人从右边入 ...
- 大名鼎鼎的RPC和MQ到底有啥区别和联系
RPC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC框架 知名度较高的有Thrift(FB的).dubbo(阿里的). R ...
- openSTack备份恢复
- c# 通过json.net中的JsonConverter进行自定义序列化与反序列化
https://www.cnblogs.com/yijiayi/p/10051284.html 相信大家在工作中会经常遇见对json进行序列化与反序列化吧,但通常的序列化与反序列化中的json结构与c ...
- Docker打包部署前端项目与负载均衡
设置淘宝镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org //在home/fn1 home/fn2放入项目和nginx ...
- Nginx 必须知道哪些事?
Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存.该软件由 Igor Sysoev 创建,并于2004年首次公开发布.同名公司成 ...
- mongo 笔记
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options ...
- 史上最全的 DB2 错误代码大全
1 前言 作为一个程序员,数据库是我们必须掌握的知识,经常操作数据库不可避免,but,在写 SQL 语句的时候,难免遇到各种问题.例如,当我们看着数据库报出的一大堆错误时,是否有种两眼发蒙的感觉呢?咳 ...