`
JavaCrazyer
  • 浏览: 3008957 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

Struts中上传文件需要注意的地方

阅读更多

今天突然想研究下Struts的上传功能,没想到搞了两个小时才搞出来,卡在一个地方,总是报错说参数类型转化异常,结果我改动了下页面,却又神出鬼没的上传成功了,赶紧记录下

 首先是web.xml中的配置,我个人喜欢每次弄个字符过滤器,以免出错

 

<filter>

<filter-name>filter</filter-name>

<filter-class>com.wujintao.dao.SetCharacterEncodingFilter</filter-class>

<init-param>

<param-name>encode</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>filter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<servlet>

    <servlet-name>action</servlet-name>

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

    <init-param>

      <param-name>config</param-name>

      <param-value>/WEB-INF/struts-config.xml</param-value>

    </init-param>

    <init-param>

      <param-name>debug</param-name>

      <param-value>2</param-value>

    </init-param>

    <init-param>

      <param-name>detail</param-name>

      <param-value>2</param-value>

    </init-param>

    <load-on-startup>2</load-on-startup>

  </servlet>

  <!-- Standard Action Servlet Mapping -->

  <servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

 

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

 

struts-config.xml中的配置,挺奇怪的最后两行必须得配上

 

<struts-config>

 

<!-- ================================================ Form Bean Definitions -->

    <form-beans>

     <form-bean name="uploadForm" type="com.javacrazyer.web.formbean.UploadForm"/>

    </form-beans>

 

<!-- =========================================== Action Mapping Definitions -->

    <action-mappings>

<action path="/upload" 

name="uploadForm" 

type="com.javacrazyer.web.action.UploadAction">

<forward name="succ" path="/succ.jsp"/>

<forward name="fail" path="/failure.jsp"/>

</action>

    </action-mappings>

 

    <controller bufferSize="8192" maxFileSize="1M" />

 

    <message-resources parameter="msgs"/>

</struts-config>

 

其次就是业务逻辑的代码了,在这之前我必须说下,这个Struts的上传用到的关键点就是自己自带的FormFile类了,因此在FormBean里面应该配上一个FormFile类型的属性

 

private String description; //文件的描述

private FormFile file;  //文件具体内容对应的实例 

 

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

public FormFile getFile() {

return file;

}

public void setFile(FormFile file) {

this.file = file;

}

 

业务逻辑处理代码

 

//具体业务流程处理方法,由Struts框架回调

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

 

String toURL = "succ";

//取数据

UploadForm uForm = (UploadForm)form;

 

String desc = uForm.getDescription();

System.out.println("description==" + desc);

 

FormFile ff = uForm.getFile();

 

if(ff == null){

toURL = "fail";

return mapping.findForward(toURL);

}

System.out.println("文件名:" + ff.getFileName());

System.out.println("内容类型:" + ff.getContentType());

System.out.println("文件大小:" + ff.getFileSize() + "字节");

 

BufferedInputStream bis = new BufferedInputStream(ff.getInputStream());

 

//目标路径

String destPath = this.getServlet().getServletContext().getRealPath("/files");

System.out.println(destPath+"===============================");

BufferedOutputStream bos = null;

 

try{

bos = new BufferedOutputStream(new FileOutputStream(destPath + "/" + ff.getFileName()));

 

//从源文件中取数据,写到目标文件中

byte [] buff = new byte[8192];

 

for(int len = -1; (len = bis.read(buff)) != -1;){

bos.write(buff, 0, len);

}

 

bos.flush();

 

}catch(IOException ie){

ie.printStackTrace();

toURL = "fail";

}finally{

if(bis != null){

try{

bis.close();

}catch(IOException ie){

ie.printStackTrace();

}

}

if(bos != null){

try{

bos.close();

}catch(IOException ie){

ie.printStackTrace();

}

}

}

 

return mapping.findForward(toURL);

 

}

 

接下来我要说的,大家都猜到了肯定是JSP页面的上传表单了,这里就是卡住我的罪魁祸首

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>My JSP 'index.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">    

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

  </head>

  <body>

 <html:form action="upload.do" enctype="multipart/form-data"> 

<html:text property="description"></html:text>

<html:file property="file"/> 

<html:submit/> 

</html:form> 

  </body>

</html>

 

为什么说它是罪魁祸首呢,因为一直都认为<input type="file" />是最佳的上传表单,谁知道我找了大半天,竟然出现在这里的它必须是STRUTS标签的表单元素,郁闷!!!深刻的教训啊。

0
0
分享到:
评论

相关推荐

    struts2图片和文件上传

    - 在HTML前端表单中,上传控件的`name`属性应被设置为`image`,这与Struts2配置相匹配,确保上传文件能够被正确接收和处理。 ```html ``` #### 后台Action处理 - **定义上传字段**:在Action类中,需要定义几个...

    struts框架图片上传和显示

    需要注意的是,为了安全起见,应避免直接使用上传文件的原始名称,以免遭受文件名注入攻击。可以使用UUID或其他唯一标识符来重命名上传的文件。 总结起来,Struts框架通过`struts2-fileupload`库支持图片上传,处理...

    struts2中导入类库时需要注意的问题

    1. **commons-fileupload-1.2.1.jar** - 提供了处理文件上传的功能,是处理用户通过表单上传文件所必需的。 2. **commons-io-1.3.2.jar** - 提供了对I/O操作的支持,包括文件读写、流处理等,是文件上传功能的辅助库...

    struts2 无刷新上传图片

    在服务器端,确保对上传文件进行重命名,避免覆盖已有文件。 9. **错误处理** 无论是前端还是后端,都需要处理可能出现的错误,如文件过大、文件类型不符、网络问题等。提供友好的错误提示,增强用户体验。 10. *...

    Struts2升级到2.5.30,问题解决及过程记录

    Struts2的每个新版本通常会包含对前一版本的兼容性改进,但有时也会引入一些不兼容性,因此升级过程中需要注意以下几点: 1. **依赖库的更新**:升级Struts2的同时,还需要检查和更新所有依赖的库,例如在提供的...

    java文件上传方法

    该代码依赖于Apache Struts框架中的`FormFile`类来获取上传文件的信息。Struts是一个开源的MVC框架,它简化了Java Web应用的开发过程。在导入声明部分,除了标准的Java IO包之外,还引入了`org.apache.struts.upload...

    javaweb中的文件上传下载工具。不依赖框架,很实用

    5. **异常处理**:文件大小限制、类型检查等都是文件上传时需要注意的,需要进行异常处理以防止非法文件或过大文件上传。 二、文件下载 1. **HTTP响应头设置**:为了让浏览器知道如何处理返回的内容,需要在响应头...

    struts最少依赖jar包

    8. **commons-fileupload.jar**:处理HTTP上传文件的功能库,如果项目涉及到文件上传,这个jar包是必不可少的。 9. **javax.servlet-api.jar** 和 **javax.servlet.jsp.jar**:这些是Servlet和JSP API的实现,因为...

    struts2文本编辑器(ckeditor),简单调用不需要多余配置

    需要注意的是,实际开发中可能还需要考虑安全问题,例如防止XSS攻击和文件上传的安全控制。因此,在使用CKEditor时,务必对用户提交的内容进行适当的过滤和验证,确保应用的安全性。同时,持续关注CKEditor的版本...

    struts2实现多文件上传

    值得注意的是,表单的`enctype`属性必须设置为`multipart/form-data`,因为这是HTML标准中规定上传文件所必需的。例如: ```jsp file:&lt;s:file name="file"&gt;&lt;/s:file&gt; fileDesc:[0]"&gt; &lt;br/&gt; file:...

    struts2+jdbc实现图片的存储与显示(图片存储在数据库内)

    1. **配置Struts2**:在Struts2应用中,我们需要创建一个Action类,该类负责接收上传的图片文件。在Action中,我们可以使用Struts2提供的文件上传功能,如`CommonsFileUploadInterceptor`。配置struts.xml文件,确保...

    java文件上传、删除、下载的通用方法总结[归类].pdf

    接着,对上传文件的后缀名或MIME类型进行验证,以控制可上传的文件类型。 ### 文件删除 文件删除通常在服务器端进行,可以按照文件路径或者数据库中存储的文件信息来定位文件。在Java中,可以使用`java.io.File`类...

    jquery_uploadify实现的下载进度条

    7. **安全性考虑**:在实际应用中,要注意防止恶意文件上传,例如检查文件类型、大小,甚至进行病毒扫描。同时,确保服务器有足够的存储空间,并对上传的文件进行合理的管理。 通过以上步骤,你就能在Struts2环境中...

    FckEditor在SSH中的配置

    在实际应用中,需注意文件上传的安全问题,防止恶意文件上传,例如进行文件类型的检查和大小限制。同时,为了防止XSS攻击,对用户输入的内容进行适当的过滤和转义。 总结,集成FCKEditor到SSH框架中,主要涉及前端...

    ssh保存图片到数据库

    7. **安全性考虑**:在处理用户上传的图片时,要注意防止恶意文件上传,例如病毒或非法内容。可以通过检查文件类型、大小,甚至进行内容扫描来确保安全性。 8. **错误处理和日志记录**:在实现过程中,应确保有适当...

    lib-s2s2h3_2.rar

    标题“lib-s2s2h3_2.rar”暗示了这是一个与Struts2、Spring2和Hibernate3集成相关的库文件的压缩包...不过,注意到有重复的文件(velocity-1.4.jar),这可能是需要清理和合并的地方,以避免潜在的版本冲突或资源浪费。

    JSP中应用CKEditor在线编辑器

    要启用图片上传,你需要配置CKEditor的文件上传处理器。这通常涉及到后端服务器接收文件、存储并返回URL的实现。具体实现取决于你的后端框架(如Spring MVC、Struts2等)。 8. **扩展与插件** CKEditor还支持众多...

    基于SSH晒晒图网站

    11. **资源文件**:`搭建网站注意事项.txt`可能包含了部署指南,如环境配置、数据库恢复步骤以及可能遇到的问题和解决方案。`数据库备份`文件是恢复数据库状态的关键,确保网站启动时能获取到正确的数据。`源代码`...

    Java安全与质量编码规范.docx

    - **上传文件验证:** 对上传文件进行大小限制和类型验证。 - **循环中避免使用低性能方式拼接字符串:** 使用StringBuilder或StringBuffer替代字符串拼接操作。 - **避免使用递归:** 除非特殊情况,否则应避免...

Global site tag (gtag.js) - Google Analytics