当进行文件上传时,表单提交方法必须为Post方法,enctype必须为multipart/form-data
。
例如:
<form action="FileUploadServlet" method = "post" enctype="multipart/form-data">
<input type = "file" name = "file"><br/>
<input type = "submit" value = "submit">
</form>
然后采用fileUpload插件中的类进行请求解析(上传文件的内容放在Post,即可通过解析获取其内容)。
Servlet的解析:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException
{
try
{
String filePath = req.getServletContext().getRealPath("/files");
File file = new File(filePath);
DiskFileItemFactory dfif = new DiskFileItemFactory(1024 * 1024,file);
ServletFileUpload fileUpload = new ServletFileUpload(dfif);
//返回的是FileItem的集合
List<FileItem> list = (List<FileItem>) fileUpload.parseRequest(req);
for (int i = 0; i < list.size(); i++)
{
FileItem fi = list.get(i);
if (fi.isFormField())
{
// 非文件的表单。
}
else
{
fi.write(new File(filePath+ "/"+
new String(fi.getName().getBytes("iso8859-1"),"iso8859-1")));
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
采用Struts2进行解析:
package com.dong.struts2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport
{
private String username;
private List<File> file;
private List<String> fileFileName;
private List<String> fileContentType;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public List<File> getFile()
{
return file;
}
public void setFile(List<File> file)
{
this.file = file;
}
public List<String> getFileFileName()
{
return fileFileName;
}
public void setFileFileName(List<String> fileFileName)
{
this.fileFileName = fileFileName;
}
public List<String> getFileContentType()
{
return fileContentType;
}
public void setFileContentType(List<String> fileContentType)
{
this.fileContentType = fileContentType;
}
@Override
public String execute() throws Exception
{
String filePath = ServletActionContext.getServletContext().getRealPath("/files");
for (int i = 0; i < file.size(); i++)
{
FileInputStream fin = new FileInputStream(file.get(i));
FileOutputStream fos = new FileOutputStream(new File(filePath + "/"
+ fileFileName.get(i)));
byte[] temp = new byte[521];
int length = 0;
while (-1 != (length = fin.read(temp)))
{
fos.write(temp, 0, length);
}
fin.close();
fos.close();
}
return SUCCESS;
}
}
其中变量的定义根据如下文档:
FileUploadInterceptor.java
下面是其帮助文档中的部分解释:
Interceptor
that is based off of MultiPartRequestWrapper, which is automatically applied
for any request that includes a file. It adds the following parameters, where
[File Name] is the name given to the file uploaded by the HTML form:
[File Name] : File - the actual File
[File Name]ContentType : String - the content type of the file
[File Name]FileName : String - the actual name of the file uploaded (not the HTML name)
文件下载:
平常而言,只需要将文件连接到文件的路径即可。但是对于有些可读文件,例如:txt、图片等文件,浏览器会自动将其显示在页面里,而不是弹出一个下载对话框。那么我们可以在Struts2的struts2.xml中进行配置。
下面的示例:
Jsp中的代码:
<body>
<a href = "fileDownload.action">txt文档</a><br/>
<a href = "./files/securecrt.zip">ppt文档</a>
</body>
Struts.xml中的配置:
<action name="fileDownload" class="com.dong.struts2.FileDownLoadAction">
<result name="success" type="stream">
<param name="inputName">txtFile</param>
<param name="contentDisposition">attachment;filename="hs.txt"</param>
</result>
</action>
对应的com.dong.struts2.FileDownLoadAction中的代码:
package com.dong.struts2;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileDownLoadAction extends ActionSupport
{
public InputStream getTxtFile()
{
return ServletActionContext.getServletContext().getResourceAsStream("files/www.pudn.com.txt");
}
@Override
public String execute() throws Exception
{
return SUCCESS;
}
}
则可以完成一个文本文件的下载。其中XML中的配置参看StreamResult.java(org.apache.struts2.dispatcher.StreamResult)中的代码。
其中各个param的含义如下:
This
result type takes the following parameters:
contentType - the stream mime-type as sent to the web browser (default =
text/plain).
contentLength - the stream length in bytes (the browser displays a progress bar).
contentDisposition - the content disposition header value for specifing the file name
(default = inline, values are typically
attachment;filename="document.pdf".
inputName - the name of the InputStream property from the chained action
(default = inputStream).
bufferSize - the size of the buffer to copy from input to output (default =
1024).
allowCaching if set to 'false' it will set the headers 'Pragma' and
'Cache-Control' to 'no-cahce', and prevent client from caching the content.
(default = true)
contentCharSet if set to a string, ';charset=value' will be added to the
content-type header, where value is the string set. If set to an expression,
the result of evaluating the expression will be used. If not set, then no
charset will be set on the header
帮助文档中提供的示例:
Example:
<result name="success" type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">imageStream</param>
<param name="contentDisposition">attachment;filename="document.pdf"</param>
<param name="bufferSize">1024</param>
</result>
分享到:
相关推荐
在本文中,我们将深入探讨使用Struts2实现文件上传和下载的各种方案。 ### 文件上传方案 #### 1. 使用Struts2进行文件普通上传 文件上传的核心是处理`multipart/form-data`类型的表单数据。Struts2通过`Struts2-...
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
网上的Struts2进行的文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子 提供多文件上传,上传成功后,提供刚上传的文件下载功能(其他的都可以在其上面进行扩充) 多文件 上传 下载...
总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。
Struts2是一个强大的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中,提供了丰富的功能,包括文件的上传和下载。在本项目中,我们关注的是如何使用Struts2来实现实时的文件交互操作,即文件的上传与...
本篇文章将详细讲解如何利用Struts2.2和Hibernate3.6实现文件的上传与动态下载。 **一、文件上传** 1. **环境配置**:首先,你需要一个集成开发环境,例如MyEclipse8.6,并安装所需的Struts2.21、JUnit4.8.2以及...
在这个“Struts2实现文件上传”的主题中,我们将深入探讨如何利用Struts2框架来实现在Web应用中的文件上传功能。 首先,我们注意到一个细节描述:“private String uploadContextType;应更正为private String ...
描述中的链接指向了CSDN博主johnjobs的一篇文章,这篇文章详细解释了如何在Struts2中实现文件上传。博主可能讨论了以下关键点: 1. **配置Struts2 Action**:在`struts.xml`配置文件中,你需要定义一个Action,该...
以上是Struts2实现文件上传和下载的基本步骤和关键概念。在实际应用中,你可能还需要考虑性能优化、错误处理、用户体验等方面。阅读博文(https://chenzheng8975.iteye.com/blog/1733841)将为你提供更具体的实现...
下面将详细阐述如何使用Struts2来实现文件上传功能。 1. **Struts2文件上传组件** Struts2框架集成了一个名为`struts2-convention-plugin`的插件,它提供了文件上传的支持。主要依赖于`Commons FileUpload`和`...
Struts2是一个非常流行的Java Web框架,用于构建企业级应用...通过以上步骤,开发者可以在Struts2框架下实现文件上传和下载功能,满足用户对数据交换的需求。但一定要注意安全性和性能优化,以确保应用的稳定和健壮。
在这个"struts2 上传文件及打包下载zip"的示例中,我们将探讨如何利用Struts2实现文件上传和下载功能。 首先,文件上传是Web应用程序中的常见需求。在Struts2中,我们可以使用`Struts2`提供的`CommonsFileUpload`...
在这个"struts实现文件上传和下载源代码"项目中,我们将会探讨如何使用Struts框架来实现在Web应用中进行文件的上传和下载功能,同时还会关注对于大文件(超过3MB)的处理策略。 1. **文件上传** 文件上传是Web应用...
Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...
这篇博客文章将探讨如何在Struts2框架下实现文件的上传和下载操作。 首先,我们需要了解文件上传的基本流程。在Struts2中,文件上传通常涉及到以下几个步骤: 1. **创建上传表单**:在HTML或JSP页面中,使用`...
在Eclipse环境中,使用Struts2框架实现文件的上传和下载是常见的Web开发任务。Struts2是一个强大的MVC框架,提供了丰富的功能来处理用户请求和响应,包括文件操作。以下是一个详细的步骤和知识点解析: 1. **Struts...
在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...
在实现文件上传时,必须注意以下安全问题: 1. **文件类型检查**:限制上传的文件类型,防止恶意用户上传可执行文件或脚本。 2. **文件名重命名**:避免文件覆盖或路径遍历攻击,对上传的文件名进行重命名。 3. **...
本项目实现了使用Struts2进行文件批量上传的功能,这涉及到几个关键的技术点,包括文件上传组件的选择、前端表单设计、后端处理逻辑以及存储策略。 1. **文件上传组件**:在Struts2中,我们通常使用`Commons ...