1. 页面使用freemerk技术设计
test.ftl
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文件上传操作</title>
<script>
function addFiles(){
var filesDiv = document.getElementById("files");
var fileInput = document.createElement("input");
fileInput.type="file";
fileInput.name="files";
var delButton = document.createElement("input");
delButton.type="button";
delButton.value="删除";
delButton.onclick=function del(){
this.parentNode.parentNode.removeChild(this.parentNode);
}
var div = document.createElement("div");
div.appendChild(fileInput);
div.appendChild(delButton);
filesDiv.appendChild(div);
}
function upLoad(){
document.form.action = "upLoad.action";
document.form.submit();
}
function down(){
document.form.action = "downloadList.action";
document.form.submit();
}
</script>
</head>
<body>
<form id="form" name="form" enctype="multipart/form-data" method="post">
<table>
<tr><td><input type="button" value="添加文件" onclick="addFiles();"/></td></tr>
<tr><td><input type="file" name="files"/></td><td></td></tr>
<tr><td><div id="files"></div></td><td></td></tr>
<tr><td><input type="button" onclick="upLoad();" value="文件上传"/></td></tr>
</table>
</form>
</body>
</html>
2.web.xml核心配置 注意使用最新的filter
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<!-- <display-name>excel</display-name>
<welcome-file-list>
<welcome-file>user.jsp</welcome-file>
</welcome-file-list> -->
<!-- <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param> -->
<!-- <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
</web-app>
3.action
package com.daizhaoyun.action;
import java.io.File;
/*import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;*/
import java.io.IOException;
/*import java.io.InputStream;
import java.io.OutputStream;*/
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class FileUpAction extends ActionSupport {
private List<File> files;
private List<String> filesFileName;
private List<String> filesContentType;
public List<File> getFiles() {
return files;
}
public void setFiles(List<File> files) {
this.files = files;
}
public List<String> getFilesFileName() {
return filesFileName;
}
public void setFilesFileName(List<String> filesFileName) {
this.filesFileName = filesFileName;
}
public List<String> getFilesContentType() {
return filesContentType;
}
public void setFilesContentType(List<String> filesContentType) {
this.filesContentType = filesContentType;
}
public String inter() {
return SUCCESS;
}
/**
* 批量上传文件
*/
public String upLoad() {
/*if (files != null) {
int i = 0;
for (; i < files.size(); i++) {
try {
InputStream is = new FileInputStream(files.get(i));
String path = ServletActionContext.getServletContext().getRealPath("/upload/");
//下一级目录
OutputStream os = new FileOutputStream(path+File.separator+filesFileName.get(i));
byte buffer[] = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0) {
os.write(buffer, 0, count);
}
os.close();
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}*/
String path = ServletActionContext.getServletContext().getRealPath("/upload/");
if(files!=null){
File savedir = new File(path);
if(!savedir.exists()){
savedir.mkdirs();
}
for(int i=0;i<files.size();i++){
File saveFile = new File(savedir,filesFileName.get(i));
try {
FileUtils.copyFile(files.get(i), saveFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
return SUCCESS;
}
}
4.struts核心配置
<?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.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/> -->
<constant name="struts.multipart.saveDir" value="/tmp"></constant>
<constant name="struts.i18n.encoding" value="utf-8"></constant>
<constant name="struts.multipart.maxSize" value="209715200" />
<package name="file" extends="struts-default" namespace="/">
<action name="inter" class="com.daizhaoyun.action.FileUpAction" method="inter">
<result name="success" type="freemarker">
/WEB-INF/test.ftl
</result>
</action>
<action name="upLoad" class="com.daizhaoyun.action.FileUpAction" method="upLoad">
<result name="success" type="freemarker">
/WEB-INF/test.ftl
</result>
</action>
</package>
</struts>
5.访问路径 以inter.action进行访问
分享到:
相关推荐
在Struts 2中,多文件上传是一项非常实用的功能,尤其是在需要用户同时上传多个文件的应用场景下。Struts 2提供了强大的文件上传支持,并且可以很容易地处理多个文件的上传。下面将详细介绍Struts 2多文件上传的关键...
本项目"struts多文件上传下载"显然专注于实现这一功能,允许用户一次性上传一个或多个文件,并且限制了上传文件的大小,以防止恶意的大文件上传。 首先,我们来看文件上传。在Struts中,文件上传通常借助于Apache的...
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...
对于大量文件上传,可以考虑使用多线程处理,提高上传效率。还可以添加进度条显示、断点续传等功能,提升用户体验。 以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目...
在Struts中,可以实现单文件和多文件的上传,并且为了提升用户体验,我们还可以添加进度条来显示文件上传的状态。本文将详细介绍如何在Struts中实现这两个功能,并带上传进度条。 首先,我们需要了解Struts中处理...
本实例主要探讨如何在Struts1中实现多文件上传功能,并结合Form中传递List类型的数据,这对于理解MVC模式下的文件处理和数据传递有重要作用。我们将深入讨论以下几个关键知识点: 1. **Struts1框架基础**: Struts...
JavaEE Struts 文件上传是Web开发中的一个常见需求,它允许用户从客户端向服务器传输文件。Struts作为JavaEE框架的一部分,提供了强大的功能来处理这种交互。以下是对这个主题的详细解析。 首先,理解文件上传的...
1. **.struts2配置**:在Struts2框架中,需要在`struts.xml`配置文件中添加相应的action配置,声明文件上传的处理方法。通常,你需要设置`<result>`类型为`stream`,以便处理上传的文件。 2. **Action类**:创建一...
Struts 是一个基于MVC(Model-View-Controller)...总结,Struts 实现文件上传涉及到配置、表单设计、Action处理和安全控制等多个环节。理解并熟练掌握这些知识点,能帮助开发者在实际项目中高效地处理文件上传需求。
Struts2.0文件上传原理主要涉及Web应用中处理用户上传文件的功能,这一过程涉及到多个步骤和技术,包括HTTP协议、Multipart/form-data编码、临时文件存储以及后台处理。以下是对Struts2.0文件上传原理的详细解释: ...
Struts2 文件上传是Web开发中的一个重要功能,它允许用户从他们的本地计算机向服务器传输文件。在Struts2框架中,文件上传是通过特定的拦截器实现的,这些拦截器处理了文件上传请求并提供了安全性和大小限制。下面将...
Struts2 文件上传是Web开发中的一个...然而,实际开发中可能需要根据项目需求进行更多的定制,例如增加多文件上传、文件预览、上传进度显示等功能。这需要对Struts2框架有更深入的理解,并灵活运用相关技术来满足需求。
同时,为了优化性能,可以考虑使用多线程处理大文件上传,或者采用分块上传策略。 以上就是关于“Struts jQuery AJAX 文件上传”的核心知识点。通过这种方式,开发者可以创建更加流畅、高效的Web应用,提供给用户更...
在Struts2中,文件上传功能是一个常见的需求,例如用户可能需要上传图片、文档或其他类型的文件。本教程将深入浅出地讲解如何在Struts2中实现文件上传,并提供一个简单的实例来帮助理解。 1. **Struts2文件上传概述...
1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供的组件,专门处理HTTP请求中的多部分数据,包括文件。首先,需要在Struts2配置文件中添加相关的拦截器,如`params`和`...