在Struts 2中上传文件

时间:2020-02-23 14:36:03  来源:igfitidea点击:

本教程我们将学习如何将文件上传到Struts 2中的服务器2以及如何在服务器计算机目录上保存上传的文件。

Struts 2的文件上传组件可用于2 application.The Struts的文件上传拦截器是基于MultiPartRequestWrapper,会自动被应用到上传mulitpart文件中的支柱2个application.Struts内置文件上传拦截2个利用在支柱上载文件请求如果它包含文件元素。

Action类

为了在Struts 2中添加文件上传功能,我们将创建名为fileuploadaction.java的动作类。

创建包org.arpit.javaPostsForLearning src文件夹下的文件FileUploadAction.java。

在fileuploadaction.java中复制以下内容

package org.arpit.javaPostsForLearning;
import java.io.File;
import java.io.IOException;
 
import javax.servlet.http.HttpServletRequest;
 
import org.apache.commons.io.FileUtils;
import org.apache.struts2.interceptor.ServletRequestAware;
 
import com.opensymphony.xwork2.ActionSupport;
 
 
public class FileUploadAction extends ActionSupport implements ServletRequestAware {
 
    private File toBeUploaded;
    private String toBeUploadedFileName;
    private String toBeUploadedContentType;
    private HttpServletRequest servletRequest;
    public String execute()
    {
         String filePath = servletRequest.getSession().getServletContext().getRealPath("/");
         File fileToCreate = new File(filePath, this.toBeUploadedFileName);
 
         try {
            FileUtils.copyFile(this.toBeUploaded, fileToCreate);
        } catch (IOException e) {
            addActionError(e.getMessage());
        }
        return SUCCESS;
    }
    public File getToBeUploaded() {
        return toBeUploaded;
    }
    public void setToBeUploaded(File toBeUploaded) {
        this.toBeUploaded = toBeUploaded;
    }
    public String getToBeUploadedFileName() {
        return toBeUploadedFileName;
    }
    public void setToBeUploadedFileName(String toBeUploadedFileName) {
        this.toBeUploadedFileName = toBeUploadedFileName;
    }
    public String getToBeUploadedContentType() {
        return toBeUploadedContentType;
    }
    public void setToBeUploadedContentType(
            String toBeUploadedFileNameContentType) {
        this.toBeUploadedContentType = toBeUploadedFileNameContentType;
    }
    @Override
    public void setServletRequest(HttpServletRequest servletRequest) {
        this.servletRequest=servletRequest;
        
    }
    
}

现在我们在这里声明了三个属性

私有文件tobeuploaded //实际文件要上传私有字符串
tobeuploadedfileName //文件名要上载的实际文件的私有字符串
toveuploadedcontenttype //内容类型的实际文件要上载

我们为上述属性提供了Getters和Setter.so Struts 2根据正在上载的文件自动设置这些值。
例如,如果你的文件名是"sampleFile",然后在Struts 2拦截器添加三个参数,要求有三个参数:[sampleFile]:文件[sampleFile]文件名:字符串[sampleFile]的ContentType:字符串

你可以在这里看到,我们已经给了我们相同的格式动作类的属性,因此将根据文件被上传自动设置这些属性。

还有一件事是,我们已经实现了我们的动作类"ServletRequestAware"界面这是得到的ServletRequest object.This请求对象是需要得到服务器的机器,其中文件是要上传的路径。

JSP:

我们将在此处创建两个JSP文件。
FileUpload.jsp将显示用于上载文件的表单。
单击上载按钮,文件将保存在服务器计算机上,请求将转发以升级为oploadsucceed.jsp,它将呈现文件名,内容类型和上传的图像。

fileupload.jsp:

在WebContent文件夹下创建FileUpload.jsp。

将以下内容复制到fileupload.jsp。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>file upload page</title>
</head>
<body bgColor="lightblue">
<s:form action="fileUpload" method="post" enctype="multipart/form-data">
    <s:file name="toBeUploaded" label="Choose file to upload" 
    <s:submit value="Upload" align="center"
</s:form>
</body>
</html>

我们已使用标签进行文件上传界面。

uploadsucceed.jsp:在WebContent文件夹下创建名为"UploadSucceed.jsp"的JSP。
将以下内容复制到UploadSucceed.jsp中。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Upload Successful</title>
<s:head 
</head>
<body>
File Name :
<s:property value="toBeUploadedFileName"></s:property>
Content type:
<s:property value="toBeUploadedContentType"></s:property>
User file :
<s:property value="toBeUploaded"></s:property>
Uploaded file:
"></img>
</body>
</html>

在SRC文件夹下创建Struts.xml。
将以下内容复制到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>
    <package name="default" extends="struts-default" namespace="/">
        <action name="fileUpload" class="org.arpit.javaPostsForLearning.FileUploadAction">
            <interceptor-ref name="fileUpload">
                <param name="maximumSize">1048576</param>
                <param name="allowedTypes">
                    image/png,image/gif,image/jpeg,image/pjpeg
        </param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">uploadSucceed.jsp</result>
            <result name="input">fileUpload.jsp</result>
        </action>
    </package>
</struts>

web.xml:

除了我们将欢迎文件更改为"fileupload.jsp"将内容复制到Web.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>
    <package name="default" extends="struts-default" namespace="/">
        <action name="fileUpload" class="org.arpit.javaPostsForLearning.FileUploadAction">
            <interceptor-ref name="fileUpload">
                <param name="maximumSize">1048576</param>
                <param name="allowedTypes">
                    image/png,image/gif,image/jpeg,image/pjpeg
        </param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">uploadSucceed.jsp</result>
            <result name="input">fileUpload.jsp</result>
        </action>
    </package>
</struts>

运行项目:

右键单击项目 - >在服务器上运行 - >在服务器上运行 - 浏览器中的服务器复制结果URL(http://localhost:8080/fileuploadInstruts2 /)。

现在我们将浏览这里的文本文件,然后单击上传。

现在再次复制http://localhost:8080/fileuploadInstruts2/URL到浏览器,然后按Enter键将再次获取第一个屏幕。

我们将浏览名为"nature.jpeg"的镜像文件,然后单击上传。