`
pilou5400
  • 浏览: 12059 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

Struts2的文件上传和下载

阅读更多
Struts2学习笔记
******Struts2的文件上传和下载******
*.文件上传90%struts帮我们做好了,我们只要大体上配一下就OK。

******不应用struts2,手工用fileuplaod上传******
*.是用第三文控件实现的,fileuplaod.
*.可选文件上传方式有三种:
1.apache-commons-FileUpload和IO两个包.
2.把两个JAR包考到工程的lib目录下。
*.文件上传两步:
1.<form>:method="post"
2.<form>:enctype="multipart/form-data"
*.fileuplaod包下面有:(fileuplaod包使用方法)org.apache.commons.fileupload.disk.DiskFileItemFactory类。(直接new出一个这样的工厂类。)
setRepository()方法:设置一个监时的目录,将一些大文件监时存放在这个目录里面。这样做不会占用很大的内存。
setSizeThreshold()方法:指定这个文件的大小,小于这个大小放入内存,超出这个大小放入硬盘。
org.apache.commons.fileupload.servlet.ServletFileUpload类,这个类是处理上传的。用DiskFileItemFactory生成的实例去构建ServletFileUpload实例。
parseRequest()方法:它会将从form传过来的所有东西无论是文件还是字符放在一个List里面,里面放的是FileItem接口。
isFormField()方法:一个boolean值来判断表单里的元素是否是文件类型的。
getInputStream()方法:获得文件的输入流。
代码:
DiskFileItemFactory factory = new DDiskFileItemFactory();
String path = request.getRealPath("/upload");
factory.setRepository(new File(path));
factory.setSizeThreshold(1024*1024);

ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> list = upload.parseRequest(request);//try

for(FileItem item : list){
if(item.isFormField()){
String name = item.getFieldName();
String value = item.getString("gbk");
request.setAttribute(name, value);
}else{ //文件类型
String name = item.getFieldName();
String value = item.getName("gbk");
int start = value.lastIndexOf("/");
String fileName = value.substring(start + 1);
request.setAttribute(name,fileName);

item.write(new File(path,fileName));

/*用上面一句话可代替*/
//OutputStream os = new FileOutputStream(new File(path,fileName));
//InputStream is = item.getInputStream();
//byte[] buffer = new byte[400];
//int length = 0;
//while((length = is.read(buffer))>0){
// os.write(buffer,0,length);
//}
//os.close;is.colse();
}
}


******应用struts2,实现文件上传******
1.JSP引入struts2标签:<%@ taglic prefix="s" uri="/struts-tags"%>
2.<s:form action="upload" theme="simple" entcype="multipart/form-data">
3.file文件:<s:file name="file"></s:file>
4.在struts.xml文件里配<action name="upload" class="com.text.acion.UploadAction">
<result name="success">/uploadResult.jsp</result>
</action>
5.建一个UploadAction.java类:属性:
String username,password;
File file//和JSP页面的file相对应。
重:String fileFileName(文件名);fileContentType(文件类型);struts自动给我们注入进来。
6.在execute()里写:
InputStream is = new FileInputStream(file);
String root = ServletActionContext.getRequest().getRealPath("/upload");
File destFile = new File(root,this.getFileFileName());
outputStream os = new FileOutputStream(destFile);
byte[] buffer = new byte[400];
int length = 0;
while((length = is.read(buffer))>0){
os.write(buffer,0,length);
}
is.close();
os.close();
return success;
7.在成功JSP页面写:
username:<s:property value="username"/>
password:<S:property value="password"/>
file:<s:property value="fileFileName"/>
8.在strutsJAR包里:default.properties里有:struts.multipart.saveDir=(默认没有配值)我们要在struts.xml里配值:<constant name="struts.multipart.saveDir" value="C:/"></constant>
9.在strutsJAR包里:default.properties里有:struts.multipart.maxSize=2097152,也就是说文件大小默认2M,当然也可以是struts.xml里改。
******修改乱码:在struts.xml里*******
<constant name="struts.i18n.encoding" value="gbk"></constant>

*.上传指定多个文件,可用集合:
1.List<File> file
2.List<String> fileFileName;
3.List<String> fileContentType;
注:这三个集合的内容是一一对应的。
用for()循环读出来。
注:JSP文件上传的表单名都得一样。就都会映射到集合里面。

*.用户指定任意多个文件,做法:add,remove有JS代码:
function addMore(){
var td = document.getElementById("more");
var br = docunent.createElement("br");
var input = document.createElement("input");
var button = document.createElement("input");
input.type = "file";
input.name = "file";

button.type = "button";
button.value = "remove";
button.onclick = function(){
td.removeChild(br);
td.removechild(input);
td.removeChild(button);
}

td.appendChild(br);
td.appendChild(input);
td.appendChild(button);

}

****** struts2指定用户上传类型约束 ******
1.在Struts2的FileUploadInterceptor.java自已的拦截器中定义了maximumSize和alloedTypesSet这两个变量,maximumSize:实现了约束文件上传大小。alloedTypesSet:实现了可上传文件的类型。
2.在<action>标签中添加
<interceptor-ref name="fileupload">
<param name="maximumSize">409600</param>
<param name="alloedTypes">application/vnd.ms-powerpoint</param>
</interceptor-ref>
注:文件类型在tomcat-conf-web.xml里能找到,不用去记。
只要自已配了拦截器,默认拦截器一定要加上。
3.上传失败了struts2会放到一个fieldError里面。在页面用标签就可以输出。当然我们可以自定义去改其中的信息。
在struts-messages.properties里面有:struts.messgaes.error.content.type.not.allwed=;我们可以在全局的message.properties里去改他的值,复盖掉。
注:文件过大也是一样的道理。


****** struts2文件下载 ******
在Struts-default.xml里的返回类型result-type name="stream"。是有关文件下载的。
1、在DownloadAction.java里的代码:
public InputStream getDownloadFile(){
return ServletActionContext.getServletContext().getResourceAsStream("/upload/struts2.ppt");
}

public String execute() throws Exception{
return SUCCESS;
}
*.struts.xml里代码:
<action name="download" class="com.test.action.DownloadAction">
<result name="succcess" type="stream">
<param name="contenType">application/vnd.ms-powerpoint</param>
<param name="contentDisposition">filename="Struts2.ppt"</param>
</result>
<param name="inputName">downloadFile</param>
</action>
type的名字要和result-type里的名字一样。
注:<param name="inputName">downloadFile</param>里的downloadFile名字要和Action类里的public InputStream getDownloadFile()方法名一样。
分享到:
评论

相关推荐

    struts2文件上传和下载

    在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...

    struts2文件上传下载源代码

    在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...

    struts2文件上传和下载精细讲解

    总的来说,Struts2的文件上传和下载功能通过集成Apache Commons FileUpload库,大大简化了开发者的工作,提供了友好的API和配置选项,使得处理文件上传和下载变得轻而易举。开发者只需要关注业务逻辑,无需过多关注...

    struts2 文件上传和下载

    在Struts2中,文件上传和下载是常见的功能,对于用户交互和数据交换至关重要。以下是对这一主题的详细阐述。 1. **文件上传** - **MultipartResolver**: 在处理文件上传时,Struts2首先需要一个MultipartResolver...

    struts2 文件上传和下载示例程序

    在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户通过表单提交的文件,例如图片、文档等。这个“Struts2 文件上传和下载示例程序”是一个演示如何在Struts2中实现这两个功能的实例。 文件上传是Web...

    Struts2文件上传和下载教程

    ### Struts2文件上传与下载教程 #### 一、文件上传原理及实现 ...以上步骤详细介绍了如何利用Struts2框架实现文件的上传和下载功能。这些技巧不仅提高了系统的可用性和安全性,还增强了用户体验。

    struts2实现文件上传下载

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。

    struts2中的文件上传和下载示例

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个...

    Struts2多文件上传下载实例

    在实际项目中,文件上传和下载功能是必不可少的,本实例将详细讲解如何在Struts2框架下实现单个文件及多个文件的上传与下载。 首先,我们需要在Struts2的配置文件(struts.xml)中添加相关的Action配置,以便处理文件...

    struts2文件上传下载

    在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...

    struts2文件上传与下载

    在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...

    Struts2文件上传与下载

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...

    Struts2文件的上传和下载

    以下将详细介绍Struts2框架下如何进行文件的上传和下载。 首先,理解文件上传的基本原理至关重要。当在HTML表单中包含文件上传字段时,需要将表单的`enctype`属性设置为`multipart/form-data`。这是因为在默认的`...

    struts2 文件的上传和下载

    Struts2是一个流行的Java web框架,它为开发者提供了一种优雅的方式来构建动态、结构化的Web...希望本文能为你提供关于Struts2文件上传和下载的基本指导,进一步学习可参考给定的博文链接或其他相关文档和示例代码。

    struts实现文件上传和下载源代码

    例如,Struts 1和Struts 2在处理文件上传和下载的方式上有显著区别,Struts 2引入了更多面向Action的API和拦截器机制。 5. **源代码分析** 在提供的压缩包文件`upload`中,可能包含了Action类、Struts配置文件、...

    Struts2文件上传下载和表单重复提交问题

    综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。

Global site tag (gtag.js) - Google Analytics