关闭

Struts框架之文件的上传

标签: 文件上传
204人阅读 评论(0) 收藏 举报
分类:

文件上传

Struts的文件上传使用的是封装好的框架,主要使用FileUpload组件实现。
对于前台页面需要在form表单中增加属性enctype=”multipart/form-data”,可以使用struts2标签<s:file/>或者使用<input type="file"/>进行浏览选择提交。

<%@ 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>文件上传</title>
</head>
<body>
    <!-- 对于文件上传需要在form标签中增加属性enctype="multipart/form-data" -->
    <form action="fileupload.action" method="post" enctype="multipart/form-data">
        <s:file name="fileUpload.files"></s:file>
        <s:submit value="上传"></s:submit>
    </form>
</body>
</html>

编写文件上传的实体类,需要有File属性和String类型的文件名称属性,另外此类可以单文件上传也可以进行多文件上传。

package com.struts.bean;

import java.io.File;

/**
 * @TODO 文件上传实体类
 * @author Administrator
 * @date 2015年7月9日 下午9:29:19
 * @version 1.0
 */
public class FileEntity {
    private File[] files;
    private String[] filesFileName;//命名方式必须为files属性后面加上FileName
    public File[] getFiles() {
        return files;
    }
    public void setFiles(File[] files) {
        this.files = files;
    }
    public String[] getFilesFileName() {
        return filesFileName;
    }
    public void setFilesFileName(String[] filesFileName) {
        this.filesFileName = filesFileName;
    }
}

文件上传服务类,可以使用FileUtils工具类进行文件copy工作。

package com.struts.service;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import com.struts.bean.FileEntity;

/**
 * @TODO 文件上传的服务类包括单文件和多文件
 * @author Administrator
 * @date 2015年7月9日 下午2:49:01
 * @version 1.0
 */
@SuppressWarnings("serial")
public class FileUpload extends ActionSupport{
    private FileEntity fileUpload;

    public FileEntity getFileUpload() {
        return fileUpload;
    }

    public void setFileUpload(FileEntity fileUpload) {
        this.fileUpload = fileUpload;
    }
    public String execute(){
        String uploadPath = ServletActionContext.getRequest().getRealPath("/");
        for(int i = 0; i < fileUpload.getFiles().length; i++){
            System.out.println(fileUpload.getFilesFileName()[i]);
            File destFile = new File(uploadPath+File.separator + fileUpload.getFilesFileName()[i]);
            try {
                FileUtils.copyFile(fileUpload.getFiles()[i], destFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return Action.SUCCESS;
    }
}

由于Struts文件上传的大小默认为2097152b,也就是2M。有两种方式可以进行文件上传的大小。
通过struts.properties配置文件中声明和使用常量配置(其实还可以通过Interfactor来进行配置)。
struts.properties配置文件:

#设置上传文件大小为10M,单位为Byte
#struts.multipart.maxSize=104857600

常量为:<constant name="struts.multipart.maxSize" value="104857600"/>
struts-file.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- 开发者模式 -->
    <constant name="struts.devMode" value="true"/>
    <!-- 主题模式为simple,避免使用struts标签造成标签冗余 -->
    <constant name="struts.ui.theme" value="simple"/>
    <!-- 设置上传文件的大小 -->
    <constant name="struts.multipart.maxSize" value="104857600"></constant>
    <package name="file" namespace="/" extends="struts-default">
        <!-- 配置全局result -->
        <global-results>
            <result name="success">/success.jsp</result>
        </global-results>
        <action name="file*" class="com.struts.service.FileUpload" method="{1}">
        </action>
    </package>
</struts>
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18936次
    • 积分:503
    • 等级:
    • 排名:千里之外
    • 原创:26篇
    • 转载:0篇
    • 译文:6篇
    • 评论:5条
    最新评论