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之文件上传的更多相关文章

  1. struts2的文件上传

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...

  2. jsp\struts1.2\struts2 中文件上传(转)

    jsp\struts1.2\struts2 中文件上传 a.在jsp中简单利用Commons-fileupload组件实现 b.在struts1.2中实现c.在sturts2中实现现在把Code与大家 ...

  3. Struts2+Uploadify文件上传使用详解

    Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例是php版本的,本文将详细介绍Uploadify在java中的使用,您也可以点击下面的链接进行演示或下 ...

  4. Struts2实现文件上传下载功能(批量上传)

    今天来发布一个使用Struts2上传下载的项目, struts2为文件上传下载提供了好的实现机制, 首先,可以先看一下我的项目截图 关于需要使用的jar包,需要用到commons-fileupload ...

  5. Struts2实现文件上传(三)

    Struts2实现文件上传 配置文件web.xml <?xml version="1.0" encoding="UTF-8"?> <web-a ...

  6. Struts2实现文件上传(二)

    Struts2实现文件上传 文件上传页面 file.jsp: <%@ page language="java" import="java.util.*" ...

  7. Struts2实现文件上传(一)

    Struts2实现文件上传 文件上传成功后结果页面 result.jsp: <%@ page language="java" import="java.util.* ...

  8. Struts2单文件上传原理及示例

    一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里 ...

  9. struts2多文件上传-2

    <!-- 多文件上传 --> <action name="UploadAction2_*" class="uploadfile.UploadAction ...

随机推荐

  1. SOAP简介及实例

    SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换. 或者更简单地说:SOAP 是用于访问网络服务的协议. 您应当具备的基础知识 在继续学习之前,您需要对下面的知识有基本 ...

  2. fastJson反序列化参数为null的问题

    fastJson反序列化为类对象时,反序列化赋值的属性只会是你构造器上写的属性. 所以部分属性值为null的原因是属性没有加在构造器上的原因. 直接加个无参数的默认构造器即可解决.或者把null属性加 ...

  3. js知识体系

  4. 轻量级Web服务器http-server

    http-server是一个简单的零配置命令行http服务器.可用于h5页面手机端测试 Vue .Angualr.React项目打包后真机测试 github地址:https://github.com/ ...

  5. ISO/IEC 9899:2011 前言

    前言 1.ISO(国际标准组织)与IEC(国际电工技术委员会)为全世界标准形成了专门的系统.作为ISO或IEC成员的国家机构,通过由各自组织所建立的技术委员会来加入国际标准的开发,以处理特定领域的技术 ...

  6. IDEA使用Git出现push to origin/master was rejected错误解决方案

    在IDEA中配置码云的URL,如下图 切换到自己项目所在的目录,右键选择GIT BASH Here 在terminl窗口中依次输入命令: git pull git pull origin master ...

  7. [LeetCode] 482. License Key Formatting 注册码格式化

    You are given a license key represented as a string S which consists only alphanumeric character and ...

  8. canal部署启动的时候报错com.alibaba.druid.pool.DruidDataSource - testWhileIdle is true, validationQuery not set

    报错信息:com.alibaba.druid.pool.DruidDataSource - testWhileIdle is true, validationQuery not set 解决方法: 找 ...

  9. Java 8 集合之流式(Streams)操作, Streams API 详解

    因为当时公司的业务需要对集合进行各种各样的业务逻辑操作,为了提高性能,就用到了这个东西,因为以往我们以前用集合都是需要去遍历(串行),所以效率和性能都不是特别的好,而Streams就可以使用并行的方式 ...

  10. 切换 Python2 Python3

    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alternati ...