Struts2之文件上传
编程技术  /  houtizong 发布于 3年前   54
Struts 2 - 文件上传
参考文章:
http://www.dzone.com/tutorials/java/struts-2/struts-2-example/struts-2-file-upload-example-1.html
拦截器(Interceptor):FileUploadInterceptor
通过拦截器的设置,我们可以定义
1.上传文件的类型(allowedTypes)
2.上传文件的扩展名(allowedExtensions)
3.上传文件的最大限制(maximumSize)bytes
<interceptor-ref name="fileUpload"> <param name="maximumSize"> 10240 </param> <param name="allowedTypes"> image/png,image/gif,image/jpeg </param> <param name="allowedExtensions"> .png,.gif,.jpeg </param></interceptor-ref>
Demo:
1. index.jsp - 创建file upload file form
<!-- ignore codes --><s:form action="fileUpload" method="post" enctype="multipart/form-data"><s:file name="image" label="User Image"></s:file><s:submit value="Upload"></s:submit></s:form><!-- ignore codes -->
2. FileUploadAction.java - 创建具体的Action class.
需要包括三个属性:
File image
String imageContentType
String imageFileName
image这个名字需要和s:file的name属性保持一致。
在Action class里实现具体的文件“拷贝”功能,即,在服务器的指定路径生成上传文件。
这里需要注意的是,如果什么都不写,只是简单的生成一个空的Action类,我们可以在eclipse的console里得到类似如下的路径信息:
C:\repository\upload_39d5eb38_6bab_496c_ba9d_8f05261ec0e2_00000000.tmp
这个tmp文件只一个临时文件,里面保存了上传文件的内容,有可能是字符流或者字节流。并且此文件在上传结束后会自动删除。
再说明下上传路径的定义。
这篇文章介绍了具体的设置方式
http://mossad.iteye.com/blog/1522905
在本例中,在struts.xml里的设置如下:
<constant name="struts.multipart.saveDir" value="/repository"/>
下面是struts.xml的全部内容:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><constant name="struts.devMode" value="true" /><!-- to save uploaded files --><constant name="struts.multipart.saveDir" value="/repository"/> <package name="basicstruts2" extends="struts-default"><action name="fileUpload" class="org.apache.struts.helloworld.action.FileUploadAction" method="execute"><result name="success">/Result.jsp</result></action></package></struts>
下面是FileUploadAction的全部内容:
package org.apache.struts.helloworld.action;import java.io.File;import org.apache.commons.io.FileUtils;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class FileUploadAction extends ActionSupport {private static final long serialVersionUID = 8938269342974350902L;private File image;private String imageContentType;private String imageFileName;@Overridepublic String execute() throws Exception {String realpath = ServletActionContext.getServletContext().getRealPath("/repository");System.out.println(realpath);System.out.println(image.getAbsolutePath());File file = new File(realpath);if(!file.exists()){file.mkdirs();}FileUtils.copyFile(image, new File(file, imageFileName));return SUCCESS;}public File getImage() {return image;}public void setImage(File image) {this.image = image;}public String getImageContentType() {return imageContentType;}public void setImageContentType(String imageContentType) {this.imageContentType = imageContentType;}public String getImageFileName() {return imageFileName;}public void setImageFileName(String imageFileName) {this.imageFileName = imageFileName;}}
这段代码会在 xxx web工程的根目录下生成一个repository文件夹来存放最后的上传文件。
例如:
..\apache-tomcat-7.0.42\webapps\basic_struts-1.0.0\repository
这里需要注意,临时存放的目录和最终的存放目录为两个不同的路径:
临时目录定义在了struts.xml,本例是:c:\repository\
文件存放路径是通过如下代码实现的:
String realpath = ServletActionContext.getServletContext().getRealPath("/repository");File file = new File(realpath);if(!file.exists()){ file.mkdirs();}FileUtils.copyFile(image, new File(file, imageFileName));
3.Result.jsp - 创建上传成功的结果页面。
最后用一个简单的页面显示出成功上传的文件名和类型:
<%@ page language="java" contentType="text/html; UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>File Name: ${imageFileName} <br/>Content Type: ${imageContentType}</body></html>
说明:
这里没有显示的去定义Action的拦截器,因为basicstruts2 继承了struts-default。在default里已经包含了
FileUploadInterceptor。如果需要特别的定义,我们可以在Action里插入
<interceptor-ref name="fileUpload"/>
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接