Struts2框架使用(十)之struts2的上传和下载

Struts2  文件上传

首先是Struts2的上传,Struts2 文件上传是基于 Struts2 拦截器实现的,使用的是fileupload组件;

首先如果想要上传文件,则需要在表单处添加 enctype="multipart/form-data" 属性。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>
<h1>文件上传</h1>
<s:fielderror></s:fielderror>
<form action="upload" method="post" enctype="multipart/form-data">
    姓名:<input type="text" name="name" />
    文件:<input type="file" name="java1234"/><br/>
    <input type="submit" value="提交"/>
</form>
<h1>多文件上传</h1>
<s:fielderror></s:fielderror>
<form action="uploads" method="post" enctype="multipart/form-data">
    文件1:<input type="file" name="java1234"/><br/>
    文件2:<input type="file" name="java1234"/><br/>
    文件3:<input type="file" name="java1234"/><br/>
    <input type="submit" value="提交"/>
</form>
</body>
</html>

然后在Action中获取数据需要按照一定格式来获取:

Struts2 获取上传文件:name (name 是文件表单的 name)
Struts2 获取上传文件名:name+FileName;
Struts2 获取上传文件的类型:name+ContentType;

import java.io.File;

import org.apache.commons.io.FileUtils;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport{

    /**
     * 文件上传
     */
    private static final long serialVersionUID = 1L;
    
    private File java1234; // 文件
    
    private String java1234FileName;  // 文件名
    
    private String java1234ContentType;  // 文件类型
    
    private String name;

    @Override
    public String execute() throws Exception {
        System.out.println("name=" + name);
        System.out.println("文件名:"+java1234FileName);
        System.out.println("文件类型:"+java1234ContentType);
     //这里写的是存储路径
        String filePath="C:/"+java1234FileName;
     //根据路径创建一个文件
        File saveFile=new File(filePath);
     //将上传得到文件流复制到路径所创建的文件上
        FileUtils.copyFile(java1234, saveFile);
        return SUCCESS;
    }

之后再struts.xml文件中配置Action即可,注意:这里的校验,是先校验package外的最大大小,一旦超过则抛出异常,不会进入到action中。

通过package外最大文件上传校验后,进入到action内部的拦截器校验时,一旦拦截,则会返回个input字段。

<?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>

  <!-- Struts2 最大文件上传大小默认是 2M 
  <constant name="struts.multipart.maxSize" value="20000000"></constant>
    -->
  <package name="manager" extends="struts-default">    
        <action name="upload" class="com.mrlv.action.FileUploadAction">
            <result name="success">/success.jsp</result>
            <result name="input">/fileupload.jsp</result>
            
            <!-- 配置文件的大小及类型 -->
            <!-- 允许后缀名为png,bmp,jpg,doc,xls的文件上传
            <interceptor-ref name="fileUpload">
                <param name="allowedExtensions">  
                png,bmp,jpg,doc,xls  
                </param>  
            </interceptor-ref>
             --> 
            <!-- 下面是限定文件类型以及文件大小 -->
            <interceptor-ref name="fileUpload">
                <param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpg,image/jpeg,image/pjpeg</param>
                <param name="maximumSize">81101</param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>         
        </action>
  </package>
</struts>

 这里就是简单的文件上传了。如果是多文件上传的话,只需要在Action中接收file的时候,创建数组类型即可。

 

Struts2  文件下载

关于文件下载,返回的是文件流。

所以在创建Action的时,如下

package com.mrlv.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import com.opensymphony.xwork2.ActionSupport;

public class FileDownloadAction extends ActionSupport{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    private String fileName;
    
   //返回的是一个文件流
    public InputStream getInputStream() throws FileNotFoundException {
     //这里取得是下载文件的路径
        File file = new File("C:/LX.txt");
     //给文件命名,中文可能回有点问题
        this.fileName = "LX.txt";
     //返回一个文件流
        return new FileInputStream(file);
    }
    
    public String getFileName() throws UnsupportedEncodingException {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    
}

 

在struts.xml中的配置

<action name="download" class="com.mrlv.action.FileDownloadAction">
            <result type="stream">
                <!-- attachment这个参数,表示跟附件一样,filename这个参数是下载文件名${fileName}通过get方法获得 -->
                <param name="contentDisposition">attachment;filename=${fileName}</param>
            </result>
        </action>

接下来在jsp页面调用即可。

<a href="download">文件下载</a>

 

posted @ 2017-12-22 16:36  糸色望  阅读(135)  评论(0编辑  收藏  举报