- 浏览: 286817 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
cheetah_ysc:
不错不错,我喜欢!
Java固定时间间隔执行 -
voyage_mh:
阿选百度竟然一下可以吧你百度出来
使用DWR注解Annotation
在实现了上传的功能的情况下,再加一点点代码就可以实现手动文件类型过滤
客户端jsp请求
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!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>
<title>简单的文件上传</title>
<meta name="author" content="Yeeku.H.Lee" />
<meta name="website" content="http://www.crazyit.org" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<!-- <span style="color: red">${requestScope.typeError}</span> -->
<s:debug></s:debug>
<span style="color: red"> <s:property value="#typeError" /> </span>
<form action="upload.action" method="post"
enctype="multipart/form-data">
文件标题:
<input type="text" name="title" />
<br />
选择文件:
<input type="file" name="upload" />
<br />
<input value="上传" type="submit" />
</form>
</body>
</html>
Action中部分代码
package lee;
/**
* 手动实现文件过滤
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class UploadAction extends ActionSupport implements
ServletContextAware {
//封装文件标题请求参数的属性
private String title;
//封装上传文件域的属性
private File upload;
//封装上传文件类型的属性
private String uploadContentType;
//封装上传文件名的属性
private String uploadFileName;
//定义Action允许过滤的文件类型
private String allowTypes;
private ServletContext context;
@Override
public String execute() throws Exception
{
//将允许上传文件类型的字符串以英文(,)分解成字符串数组
//从而判断当前文件类型是否可以上传
String filterResult = filterType(getAllowTypes().split(","));
//System.out.println(getAllowTypes());
//System.out.println( filterResult);
if(filterResult != null){
//此put方法是将值放在Stack Content中而不是Value Stack Contents中
ActionContext.getContext().put("typeError", "你要上传的文件类型不正确!!!");
return filterResult;
}
//以服务器的文件保存地址和原文件名建立上传文件输出流
FileOutputStream fos =
new FileOutputStream(context.getRealPath("/upload")
+ "\\" + getUploadFileName());
FileInputStream fis = new FileInputStream(getUpload());
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0)
{
fos.write(buffer , 0 , len);
}
return SUCCESS;
}
//此方法用于过滤文件类型
public String filterType(String[] types){
//获取希望上传的文件类型
String fileType = getUploadContentType();
for (String type : types) {
if(type.equals(fileType)){
return null;
}
}
return INPUT;
}
//文件标题的setter和getter方法
public void setTitle(String title)
{
this.title = title;
}
public String getTitle()
{
return (this.title);
}
//上传文件对应文件内容的setter和getter方法
public void setUpload(File upload)
{
this.upload = upload;
}
public File getUpload()
{
return (this.upload);
}
//上传文件的文件类型的setter和getter方法
public void setUploadContentType(String uploadContentType)
{
this.uploadContentType = uploadContentType;
}
public String getUploadContentType()
{
return (this.uploadContentType);
}
//上传文件的文件名的setter和getter方法
public void setUploadFileName(String uploadFileName)
{
this.uploadFileName = uploadFileName;
}
public String getUploadFileName()
{
return (this.uploadFileName);
}
public String getAllowTypes() {
return allowTypes;
}
public void setAllowTypes(String allowTypes) {
this.allowTypes = allowTypes;
}
public ServletContext getContext() {
return context;
}
public void setContext(ServletContext context) {
this.context = context;
}
public void setServletContext(ServletContext context) {
this.context = context;
}
}
Action只自己多一个方法要与过滤文件类型
//此方法用于过滤文件类型 public String filterType(String[] types){ //获取希望上传的文件类型 String fileType = getUploadContentType(); for (String type : types) { if(type.equals(fileType)){ return null; } } return INPUT; }
strut. xml文件(多设置一个参数用于限定文件的类型Action中直接取)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 指定国际化资源文件的baseName为globalMessages -->
<constant name="struts.custom.i18n.resources" value="globalMessages"/>
<!-- 设置该应用使用的解码集 -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<package name="lee" extends="struts-default">
<!-- 配置处理文件上传的Action -->
<action name="upload" class="lee.UploadAction">
<!-- 设置允许上传文件的文件类型 -->
<param name="allowTypes">image/bmp,image/png,
image/gif,image/jpeg</param>
<!-- 上传失败退回input逻辑视图 -->
<result name="input">/upload.jsp</result>
<!-- 配置Struts 2默认的视图页面 -->
<result>/succ.jsp</result>
</action>
</package>
</struts>
发表评论
-
Struts2类型转换
2010-12-17 14:46 13541.自定义类型转换器 第一步:编写自定义的转换器类 ... -
Struts2的基本原理
2010-12-17 14:35 1212Struts2 的基本工作流程 Struts2框架是由 ... -
Strut2使用拦截器过滤权限问题
2010-10-18 19:27 1295JSP请求(login.jsp) <%@ page ... -
Strrts2基于Annotation的输入验证
2010-10-18 17:35 1162客户端jsp请求Action代码 <%@ page ... -
Struts2异常处理
2010-10-18 12:28 1320异常映射分为两种:局部异常映射,全局异常映射。局部异常映射会 ... -
Struts2向结果传参数
2010-10-15 11:43 1909JSP请求页面(传参) &l ... -
Struts2动态指定结果
2010-10-14 22:32 1255Jsp反问页面 <%@ page language= ... -
Strut2中Action的Result类型
2010-10-14 22:16 1596type="dispatcher" 只是跳 ... -
Web中request,session,application的获取(1)
2010-10-14 17:51 1109jsp请求 <%@ page language=&q ... -
文件下载(struts2 Action)
2010-10-10 11:34 1718客户端jsp请求Actin <%@ page lan ... -
文件下载(超链接)
2010-10-10 11:09 1086文件下载有时候很简单,直接通过一个超链接就可以实现文件下载(注 ... -
Struts2多文件上传
2010-10-10 00:03 894可以是数组也可以是list和map jsp请求代码 A ... -
Struts2上传文件通过配置文件实现文件过滤
2010-10-09 18:07 3246客户端端jsp请求 <%@ page content ... -
Struts2上传文件(2)
2010-10-09 14:08 838html请求 Action处理(和前面那个上传基本一样 ... -
Struts2上传文件
2010-10-09 13:31 1073struts上传需要的jar包 ... -
Action基本的验证(校验规则文件)
2010-10-06 10:47 979客户端jsp请求 <%@ page language= ... -
Action基本的验证
2010-10-06 10:12 800JSP请求 <%@ page language=&qu ... -
使用action属性接收参数,中文问题
2010-10-05 16:08 1135客户端JSP请求(这里可 ... -
使用模型驱动来接收参数
2010-10-05 16:02 1753一个简单的javaBean来封装将要请求的参数可以是VO,属性 ... -
使用域模型接收参数并封装
2010-10-05 15:57 946JSP请求代码,传了参数 <%@ page langu ...
相关推荐
使用Struts2实现手动过滤文件上传的类型和大小 为了确保安全,通常需要限制上传文件的类型和大小。可以通过自定义拦截器或者在Action中实现检查。例如,可以检查文件扩展名,限制文件大小,甚至读取文件内容进行更...
struts2 实现文件上传,手动对上传文件进行过滤,希望对大家有用 <param name="allowTypes">application/octet-stream,application/pdf</param> <!-- 仅允许上传ppt,pdf格式的 -->
总结来说,无论是手动实现文件过滤还是利用Struts2提供的文件上传拦截器,都能够有效地控制文件上传的过程。而在文件下载方面,则主要依赖于HTTP响应头的设置以及文件流的处理。这些技术点是开发基于Struts2框架的...
2. **使用拦截器实现文件过滤**:Struts2提供了一种更灵活的方法来实现文件过滤,即通过自定义拦截器。开发者可以创建一个自定义拦截器来处理文件上传前的验证逻辑。 3. **输出错误提示**:如果文件上传失败或不...
在Struts2中,有两种方式实现文件过滤和验证: 1. 手动验证:在Action类中重写`validate()`方法,检查`contentType`属性是否符合预设的允许类型列表。如果不符合,使用`addFieldError()`方法添加错误信息,导致视图...
在Struts2框架中,文件上传和下载是常见的功能需求,但处理中文文件名或内容时,可能会遇到中文乱码的问题。这个问题主要涉及到字符编码的处理,包括HTTP请求的编码、文件名的编码以及文件内容的编码。接下来,我们...
- 应限制文件大小和类型,对上传文件进行验证和过滤,例如只接受某些特定类型的图片或文档。 7. **前端响应**: - 一旦文件上传成功或失败,需要更新用户界面显示状态。可以通过JSP、JS或者其他前端技术来实现这...
### Struts2与jQuery结合实现文件上传的知识点详解 #### 一、技术栈介绍 本文主要探讨了在Struts2框架下使用jQuery及其插件实现文件上传的技术方案。具体涉及的技术栈包括: - **Struts2**: 一个开源的Web应用...
这个上传的压缩包文件包含了一个手动搭建的Struts2登录实例,可以帮助我们学习和理解Struts2的核心概念和配置。下面将详细阐述Struts2的基本原理、搭建流程以及关键组件。 首先,Struts2是Apache软件基金会开发的一...
在MyEclipse中,为了获得struts.xml的代码提示,需要手动导入DTD文件,具体步骤如下: 1. 打开MyEclipse,依次点击**Window > Preferences > MyEclipse > Files and Editors > XML > XML Catalog**。 2. 在右侧的...
- **拦截器**:Struts2的核心之一,通过拦截器可以实现诸如文件上传、输入验证等功能。 - **处理与分配流程**: - **前端请求**:用户发起的HTTP请求。 - **StrutsPrepareAndExecuteFilter**:处理请求的第一道...
为了在MyEclipse中获得XML文件的代码提示,需要手动导入Struts2的DTD: 1. 打开MyEclipse的首选项设置。 2. 选择"Files and Editors" -> "XML" -> "XML Catalog"。 3. 添加新的DTD条目,指定struts-2.0.dtd文件的...
- **CVE-2014-0114**:这个漏洞是由于Struts2的上传功能处理不当时,导致了文件包含漏洞,攻击者可以利用此漏洞将恶意代码写入服务器。 - **其他漏洞**:除了上述两个,Struts2还有许多其他的漏洞,如XSS(跨站...
5. **Struts2实现文件上传及下载**: - 使用`FileUpload interceptor`处理文件上传,理解多文件上传和限制大小的配置。 - 文件下载通过Action返回流对象实现,注意设置Content-Disposition和Content-Type头。 6. ...
然后,需要在`web.xml`中配置Struts2过滤器,以启动Struts2框架。默认的配置文件是`struts.xml`,通常放在`WEB-INF/classes`目录下。 **Struts2配置文件**: `struts.xml`是Struts2的主要配置文件,用于定义Action...
Apache Struts 2 是一款强大的、可扩展的Java Web应用程序框架,它提供了高效的开发流程,涵盖了从构建、部署到后续应用程序维护...开发者可以通过Struts2轻松实现MVC模式,从而专注于业务逻辑的实现,而非底层的细节。
6. **commons-fileupload-1.2.1.jar** - 文件上传组件,处理用户上传文件。 特别注意的是,Struts2的2.1.6版本需要`commons-fileupload-1.2.1.jar`,因为它包含了`RequestContext`类,这是处理文件上传所必需的。...
手动配置时,你需要下载Struts2的核心库,然后在项目的web.xml中添加Struts2的过滤器配置: ```xml <filter-name>struts2 <filter-class>org.apache.struts2.dispatcher.ng.filter....