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:filename属性保持一致。

 

在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];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客