原理:
表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值:
1) application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式。
2) multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里。
3) text/plain:这种方式主要适用于直接通过表单发送邮件的方式。
文件上传是web应用经常用到的一个知识。原理是,通过为表单元素设置enctype=”multipart/form-data”属性,让表单提交的数据以二进制编码的方式提交,在接收此请求的Servlet中用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。
在Java领域中,有两个常用的文件上传项目:一个是Apache组织Jakarta的Common-FileUpload组件([url]http://commons.apache.org/fileupload/[/url]),另一个是Oreilly组织的COS框架([url]http://www.servlets.com/cos/[/url])。利用这两个框架都能很方便的实现文件的上传。
Strtus上传文件==================================
1,所需jars
2, JSP 代码 ,注意:enctype="multipart/form-data"
<body> <form action="fileupload.action" method="post" enctype="multipart/form-data"> 上传文件 <input type="file" name="targetFile" /> <br /> <input type="submit" value="上传"> </form> </body>
3,UploadAction.java
//注意:上传下载中一定要继承ActionSupport.否则INPUT无法识别 public class UploadAction extends ActionSupport{ private File targetFile; // 上传文件时候的缓存文件, // 必须和jsp中<input file>的name属性相同 private String targetFileFileName; // file的name+FileName; private String targetFileContentType; // file的name+ContentType; public String execute() { System.out.println(targetFile.getPath()); System.out.println(targetFileFileName); // 得到文件名 System.out.println(targetFileContentType); String destPath = ServletActionContext.getServletContext().getRealPath( "/upload"); try { InputStream is = new FileInputStream(targetFile); OutputStream os = new FileOutputStream(new File(destPath, targetFileFileName)); int b = -1; byte[] buff = new byte[1024]; while ((b = is.read(buff)) != -1) { os.write(buff, 0, b); } os.flush(); os.close(); is.close(); } catch (Exception e) { e.printStackTrace(); return ERROR; } return SUCCESS; } // getter/setter....DownLoad.java
public class DownloadAction extends ActionSupport { private String filename; // 省略getter.setter方法 // 去掉get,首字母小写得到tagetFileName, // 这个名字要和struts.xml中的 // <result type="stream"> 标签中的<param name="inputName">的值一直 //他是获取下载文件流的入口方法 public InputStream getTagetFileName() { InputStream is = ServletActionContext.getServletContext() .getResourceAsStream("/upload/" + filename); return is; } @Override public String execute() throws Exception { return SUCCESS; } }
4,Struts.xml文件编写
<struts> <constant name="struts.devMode" value="true" /> <constant name="struts.action.extension" value="do,action,,"></constant> <!-- 设置上传文件的大小最大是5M --> <constant name="struts.multipart.maxSize" value="5242880"></constant> <package name="default" namespace="/" extends="struts-default"> <action name="fileupload" class="com.tarena.web.UploadAction"> <!-- 引用系统默认拦截器,限制上传文件的类型 --> <interceptor-ref name="fileUpload"> <param name="allowedTypes">image/png,image/jpeg,audio/mp3</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result><!-- 执行异常跳转的页面 --> <result name="input">/fail.jsp</result> <!-- 如果上传尺寸超标或者类型错误,则跳转到此页面。 --> </action> <!-- 文件下载设置 --> <action name="filedownload" class="com.tarena.web.DownloadAction"> <result type="stream"> <!-- 图片的返回类型是个流 --> <!-- 指定文件以附件形式下载 ,${filename}是DownloadAction.java中定义的输出属性,这里是指定下载文件的名字--> <param name="contentDisposition">attachment;filename="${filename}"</param> <!-- 获取要下载的文件,该文件名一定要在Action中提供其getter方法。 --> <param name="inputName">tagetFileName</param> <!-- 设置要下载的文件大小--> <param name="bufferSize">2048</param> </result> </action> </package> <!-- Add packages here --> </struts>
5,测试地址:localhost:8008/struts2_fileUpload/filedownload.action?filename=0.jpg
附件下载:
文章参考:http://blog.csdn.net/lisa0220/article/details/6400767
相关推荐
在"struts2上传下载项目"中,我们可以深入理解如何利用Struts2实现文件的上传与下载功能。 首先,上传功能在Web应用中十分常见,比如用户在注册时上传头像,或者提交文档等。在Struts2中,我们主要借助`struts2-...
### Struts2上传下载功能详解 #### 一、引言 在Web开发中,文件上传下载是一项常见的需求,尤其在用户交互频繁的应用场景中。Struts2作为一款成熟且广泛使用的MVC框架,提供了简洁而强大的文件上传下载功能。本文...
在"struts2 上传下载"这个主题中,我们主要关注的是如何在Struts2框架下实现文件上传和下载的功能。这一知识点对于任何需要处理用户提交文件的Web应用程序都至关重要。 首先,我们需要了解Struts2的Action类,它是...
这篇博客文章“Struts2 上传下载模板”可能提供了关于如何在Struts2框架中实现这一功能的详细教程。 首先,我们来讨论文件上传。在Struts2中,文件上传通常依赖于`Apache Commons FileUpload`库,它处理了文件的多...
在"struts2上传下载+前端剪切图片"这个主题中,我们将探讨Struts2框架如何处理文件上传和下载功能,以及如何在前端实现图片的剪切操作。 **文件上传**: 在Struts2中,文件上传主要依赖于Apache的Commons ...
在这个“Struts2 上传下载项目”中,我们将深入探讨如何利用Struts2实现文件上传与下载功能,并结合MySQL数据库、DAO(数据访问对象)层以及MVC架构来构建一个完整的应用。 1. **Struts2框架基础** Struts2的核心...
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
在Struts2中,实现文件上传和下载功能是常见的需求,这对于用户交互和数据交换至关重要。本文档将深入讲解Struts2中如何进行文件上传和下载的代码实现及其流程。 首先,我们需要理解Struts2文件上传的核心组件:`...
在Struts2框架中,处理文件上传和下载功能是必不可少的一部分,尤其是在用户需要交互式地提交或获取文件的场景下。在这个“struts2 上传下载组建Jar”中,主要包括了两个关键的第三方库:`commons-io-1.4.jar`和`...
在Struts2中,文件上传和下载是常见的功能需求,尤其对于处理用户提交的表单数据时,如上传图片、文档等。这个"struts2_上传下载"实例则涵盖了多种实现这些功能的方法。 首先,Struts2的文件上传依赖于Apache的...
在Struts2中,上传和下载功能是常见的需求,特别是在处理用户交互和数据交换时。这个“Struts2上传下载组件”就是为了满足这种需求而设计的。让我们深入探讨一下这个组件的工作原理以及如何在实际项目中使用它。 ...
Struts2作为一款流行的Java Web框架,为开发者提供了丰富的功能,其中包括文件上传和下载的处理。在Struts2中,实现文件上传下载是一项常见的任务,它涉及到HTTP协议、MIME类型、临时文件处理以及流的读写等多个方面...