Struts2文件的上传与下载详解编程语言

Struts2文件的上传:
要想使用 HTML 表单上传一个或多个文件, 必须把 HTML 表单的 enctype 属性设置为 multipart/form-data, 把它的 method 属性设置为 post
为了让用户能够选择一个文件进行上传, 程序员必须提供一个 <input type=“file”>字段

struts2 的文件上传使用拦截器 fileUpload 完成上传,只需要提供属性接受数据即可,属性名称具有固定性

上传需要属性
文件:File 名称,是表单 ,<input type=”file” z中name的值
文件名称:String inputNameFileName , 自定义 + “FileName”
文件类型:String inputNameContentType , 自定义 + “ContentType”
如果上传多个文件,需要使用List或数组接收,文件名称与类型,使用逗号分隔

代码实现:
jsp文件:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<%@ taglib uri="/struts-tags" prefix="s" %> 
<!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> 
    <s:fielderror></s:fielderror> 
    <form action="${pageContext.request.contextPath}/fileUploadAction" method="post" enctype="multipart/form-data"> 
        上传内容:<input type="file" name="image"/> <br/> 
        上传内容:<input type="file" name="image"/> <br/> 
        <input type="submit" value="上传" /> 
    </form> 
 
 
</body> 
</html> 

action类:

public class FileUploadAction extends ActionSupport { 
 
    // 1文件 
    private List<File> image; 
    // 2 文件名称 
    private String imageFileName; 
    // 3 文件类型 
    private String imageContentType; // MIME类型,格式:大类型/小类型;参数    例如:text/html;charset=UTF-8 
 
    @Override 
    public String execute() throws Exception { 
        // 保存文件到指定的位置 
        String baseDir = ServletActionContext.getServletContext().getRealPath("/upload"); 
 
        String[] fileNameArray = imageFileName.split(","); 
 
        for (int i = 0; i < image.size(); i++) { 
            File img = image.get(i); 
            // 使用工具类,将file保存到指定的目录中的指定文件名 
            FileUtils.copyFile(img, new File(baseDir, fileNameArray[i])); 
        } 
 
        return SUCCESS; 
    } 
 
    public List<File> getImage() { 
        return image; 
    } 
 
    public void setImage(List<File> image) { 
        this.image = image; 
    } 
 
    public String getImageFileName() { 
        return imageFileName; 
    } 
 
    public void setImageFileName(String imageFileName) { 
        this.imageFileName = imageFileName; 
    } 
 
    public String getImageContentType() { 
        return imageContentType; 
    } 
 
    public void setImageContentType(String imageContentType) { 
        this.imageContentType = imageContentType; 
    } 
 
} 

struts.xml文件中action的配置:

<action name="fileUploadAction" class="com.my.action.FileUploadAction" > 
            <result name="success">/success.jsp</result> 
            <!-- 输入信息错误的处理结果 input --> 
            <result name="input">fileUpload.jsp</result> 
            <!-- 默认情况,引用拦截器栈 --> 
            <interceptor-ref name="defaultStack"> 
                <!-- 给上传拦截器设置,允许的扩展名--> 
                <param name="fileUpload.allowedExtensions">.jpeg,.png</param> 
            </interceptor-ref> 
        </action>

Struts2的文件下载:
struts2提供了stream结果类型,该结果类型就是专门用于支持文件下载功能的
指定stream结果类型 需要指定一个 inputName参数,该参数指定一个输入流,提供被下载文件的入口

action类

package com.my.action; 
 
import java.io.InputStream; 
import java.io.UnsupportedEncodingException; 
 
import org.apache.struts2.ServletActionContext; 
 
import com.opensymphony.xwork2.ActionSupport; 
 
public class DownloadAction extends ActionSupport { 
 
    //1 文件, 
    private InputStream targetName;     //struts.xml配置内容:<param name="inputName">targetName</param> 
 
    //2 文件类型 
    private String fileType; 
 
    //3 文件名称 
    private String fileName; 
 
    @Override 
    public String execute() throws Exception { 
        // 3 设置文件名称 
        this.fileName = "图片.PNG"; 
        // 1 提供下载资源流 
        this.targetName = ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName); 
        // 2 获得需要下载文件类型 
        this.fileType = ServletActionContext.getServletContext().getMimeType(fileName); 
 
        return SUCCESS; 
    } 
 
    public InputStream getTargetName() { 
        return targetName; 
    } 
 
    public void setTargetName(InputStream targetName) { 
        this.targetName = targetName; 
    } 
 
    public String getFileType() { 
        return fileType; 
    } 
 
    public void setFileType(String fileType) { 
        this.fileType = fileType; 
    } 
 
    public String getFileName() throws UnsupportedEncodingException { 
        // 4 处理下载中文乱码情况 
        fileName = new String(fileName.getBytes("GBK"),"ISO-8859-1"); 
        return fileName; 
    } 
 
    public void setFileName(String fileName) { 
        this.fileName = fileName; 
    } 
 
} 
 

struts.xml文件中action的配置:

<action name="fileDownloadAction" class="com.my.action.DownloadAction"> 
            <result name="success" type="stream"> 
                <!-- 1 确定文件,需要设置action中的属性 --> 
                <param name="inputName">targetName</param> 
                <!-- 2 确定文件需要下载,且提供下载文件名称   
                    等价于 
                    response.setHeader("content-disposition","attachment;filename=文件名称"); 
                --> 
                <param name="contentDisposition">attachment;filename=${fileName}</param> 
                <!-- 3 确定文件类型 --> 
                <param name="contentType">${fileType}</param> 
            </result> 
        </action> 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12072.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论