`
phoebird
  • 浏览: 113876 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Struts2下多文件的上传与下载

阅读更多

Struts2下多文件的上传与下载

目录

关键词... 1

写在前面... 1

需求... 1

环境... 2

目录结构... 3

重要文件的看点... 3

web.xml. 3

struts.xml. 4

UploadAction. 5

DownloadAction. 8

UploadConfigurationRead. 10

工程结果截图... 13

提供原代码下载... 14

 

关键词

多文件 上传 下载 随意文件 java Struts2 单例 配置 动态读取 李顺利 

 

写在前面

    在网络上,对于Java处理文件上传和下载的技术比较多,而Struts作为一款优秀的框架也提供了非常方便的文件上传和下载,而网上的一些例程都非常的不全面,概括来:

1)   文件上传比较多,多文件上传少一点

2)   文件下载很少的,看似简单,实则不然

3)   文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子

最近也在研究一下文件的上传和下载,在整合网上、浪曦风中叶老师和自己的学习的思想,写了这个工程,提供给大家参考,所以的代码终在IEFireFoxChrome测试通过。

 

需求

1.能够对多个文件进行上传(可以选择上传文件个数,也即上传文件个数不定)

2.能够对上传路径进行配置文件(upload.properties)指定,使用了一些类似单例模式的静态代码块

3.对配置文件中的路径可以进行动态读取(不重启服务器)

4.Struts2进行下载处理,能对上传的所有文件进行下载(多个)

5.文件保存的名称UUID生成,不过显示并下载的名称都是原文件名称

(人性化,通过UploadFiles处理)

 

环境

最新的Struts2struts-2.1.8MyEclipseTomcatIEFireFoxChrome

 

目录结构

clip_image001

 

重要文件的看点

web.xml

    <filter>

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

        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

    </filter>

    web.xml中使用了最新的Struts2的中央处理器类org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,而不再是以前的org.apache.struts2.dispatcher.FilterDispatcherFilterDispatcher在新版本Struts2中已经标注为过时了,请大家尽量使用最新的filter

 

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.i18n.encoding" value="utf8" />

    <package name="file" namespace="/" extends="struts-default">

       <action name="showUpload">

           <result>/upload.jsp</result>

       </action>

       <action name="upload" class="org.usc.file.UploadAction">

           <result name="input">/upload.jsp</result>

<!--          <result name="success">/upload_success.jsp</result>-->

           <result name="success">/download.jsp</result>

           <interceptor-ref name="fileUpload">

<!--大家可以设置成自己的配置,想文件类型和大小等限制          -->

<!--              <param name="maximumSize">2097152</param>单位是字节   2M  2097152B       -->

<!--              <param name="allowedTypes">image/bmp,image/x-png,image/png,image/gif,image/jpeg,image/jpg,image/pjpeg</param>-->

<!--              -->

<!--                 容许文件类型为doc,ppt,xls,pdf,txt,java-->

<!--              -->

           </interceptor-ref>

           <interceptor-ref name="defaultStack"></interceptor-ref>

       </action>

 

       <action name="download" class="org.usc.file.DownloadAction">

           <result name="success" type="stream">

              <param name="contentDisposition">attachment;filename="${fileName}"</param>

              <param name="inputName">downloadFile</param>

           </result>

       </action>

    </package>

</struts>

 

就是文件上传和下载的一些Struts2配置,注意上传的时候,请引入

<interceptor-ref name="defaultStack"></interceptor-ref>

下载的配置中注意:<param name="inputName">downloadFile</param>

其他的配置解释网上很多,不懂的可以先google学习一下。

 

UploadAction

在此文件中请注意文件数组的使用,因为是多文件

 

package org.usc.file;

import java.io.File;

import java.util.ArrayList;

import java.util.List;

import java.util.UUID;

import org.apache.commons.io.FileUtils;

import org.apache.struts2.ServletActionContext;

import org.usc.utils.UploadConfigurationRead;

import com.opensymphony.xwork2.ActionSupport;

 

/**

 * 多文件上传类

 *

 * @author MZ

 *

 * @Time 2009-11-24下午09:26:44

 */

public class UploadAction extends ActionSupport

{

 

    /**

     *

     */

    private static final long serialVersionUID = 1L;

    private File[] upload;// 实际上传文件

    private String[] uploadContentType; // 文件的内容类型

    private String[] uploadFileName; // 上传文件名

    private List<UploadFiles> uploadFiles = new ArrayList<UploadFiles>();

 

    public String execute() throws Exception

    {

       try

       {

           String targetDirectory = ServletActionContext.getServletContext()

                  .getRealPath("/"+ UploadConfigurationRead.getInstance().getConfigItem("uploadFilePath").trim());// 获得路径

           for (int i = 0; i < upload.length; i++)

           {

              String fileName = uploadFileName[i];// 上传的文件名

              String type = uploadContentType[i];// 文件类型

              String realName = UUID.randomUUID().toString()+ getExt(fileName);// 保存的文件名称,使用UUID+后缀进行保存

 

              File target = new File(targetDirectory, realName);

              FileUtils.copyFile(upload[i], target);// 上传至服务器的目录,一般都这样操作,

                                                 // 在把路径写入数据库即可

 

              UploadFiles uf = new UploadFiles();// 创建文件

<
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics