Struts2ファイルのアップロードとファイルのダウンロード

Struts2のデフォルトのインターセプタースタックにはファイルアップロードインターセプターが含まれており、その基盤となる実装はapacheのcommons.fileUploadに依存しており、WebフォームはStruts2ファイルアップロードインターセプターを介してファイルを直接アップロードできます。

インターセプターは、クライアントによってアップロードされたファイルをシステムの一時ディレクトリに自動的に保存します。Struts2Actionが実行する必要があるのは、一時ディレクトリ内のファイルをIOストリームを介して指定されたディレクトリに転送することです。

注:
①ファイルをアップロードするときは、struts2-core-2.3.37.jar \ org.apache.struts2 \ default.propertiesのファイルアップロードサイズの制限に注意してください。②JSP
ここに画像の説明を挿入します
ページのファイルアップロードフォームフォームにenctype = "multipartを追加する必要があります。/ form- Data "
ここに画像の説明を挿入します
ファイルのアップロードアクション:

package action;

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

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

public class UploadAction {

	private File[] images;
	// 此处命名必须以File类型文件属性名称 + FileName结尾,否则无法识别
	private String[] imagesFileName;

	// 此处省略字段的Getters和Setters

	public String execute() {
		// 考虑images[]未创建的情况,预防未选择任何文件而直接提交时触发的空指针异常
		if (null != images) {
			for (int i = 0; i < images.length; i++) {
				try {
					// 实际Web项目无权操作客户机的文件路径,仅项目路径可供使用
					String path = ServletActionContext.getServletContext().getRealPath("/images");
					File destFile = new File(path, imagesFileName[i]);
					FileUtils.copyFile(images[i], destFile);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return "success";
		}
		return "message";
	}

}

サーバーがブラウザでサポートされているファイルタイプ(txt、jpgなど)をクライアントに送信すると、ブラウザに直接表示されます。逆に、サーバーがユーザーにファイルをに保存するように要求する場合は、添付ファイルの形式であり、ファイルのダウンロードとも呼ばれます。ブラウザにファイルダウンロード機能を提供するには、HTTP応答ヘッダーのContent-Disposition = attachmentを設定する必要があります。

Actionクラスは、ファイル入力ストリーム(ダウンロードされたファイルリソースをクライアントに提供するサーバーを指定するために使用)とファイル名(ユーザーがダウンロードしたリソースファイルの名前)の2つの属性を提供する必要があります。 struts.xml構成ファイル内の対応するアクションの結果タグをstreamに設定する必要があります。

ファイルのダウンロードアクション:

package action;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import org.apache.struts2.ServletActionContext;

public class DownloadAction {

	private InputStream is;
	// 此处的文件名称无需仿照文件上传时的xxxFileName,命名规范即可
	private String fileName;

	// 此处省略字段的Getters和Setters

	public String execute() throws UnsupportedEncodingException {
		fileName = "16.jpeg"; // 将项目pojoImgs下的16.jpeg作为资源下载目标
		is = ServletActionContext.getServletContext().getResourceAsStream("/pojoImgs/" + fileName);
		// 手动指定资源下载时的文件名称,实际宜从DB中加载
		fileName = "下载测试.jpeg";
		// 解决中文资源名称乱码问题:先以utf-8拆解,再以ISO-8859-1组装
		byte[] bytes = fileName.getBytes("utf-8");
		fileName = new String(bytes, "ISO-8859-1");
		return "success";
	}

}

struts.xml(重要)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<!-- 手动指定default.properties中总上传文件大小的限制 -->
	<constant name="struts.multipart.maxSize" value="20971520"/>
	<package name="strutsFiles" namespace="/upAndDownload" extends="struts-default">
		<action name="uploadAction" class="action.UploadAction">
			<result name="success">/welcome.jsp</result>
			<result name="message">/message.jsp</result>
			<!-- 指定上传文件的扩展名 -->
			<interceptor-ref name="defaultStack">
				<param name="fileUpload.allowedExtensions">bmp,gif,jpg,jpeg,png,webp</param>
			</interceptor-ref>
		</action>
		<action name="downloadAction" class="action.DownloadAction">
			<result type="stream">
				<!-- 指定文件资源以存于Action中的fileName属性值命名  -->
				<param name="contentDisposition">attachment;filename=${fileName}</param>
				<!-- param标签的name属性值默认为inputName -->
				<!-- 当且仅当文件下载Action中的InputStream名为inputStream时此句可省略 -->
				<param name="inputName">is</param> <!-- is为文件下载Action中的InputStream名称 -->
			</result>
		</action>
	</package>
</struts>

WebRootディレクトリ構造:
ここに画像の説明を挿入します
index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Index</title>
	</head>
	<body>
		<!-- form的enctype="multipart/form-data"属性值是表单文件上传的必填选项 -->
		<form action="upAndDownload/uploadAction" method="post" enctype="multipart/form-data">
			请选择图片:<br /><br />
			<input type="file" name="images" /><br /><br />
			<input type="file" name="images" /><br /><br />
			<input type="file" name="images" /><br /><br />
			<input type="submit" value="上传" />
		</form><br /><br />
		<a href="upAndDownload/downloadAction">下载一张图片...</a>
	</body>
</html>

message.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Message</title>
	</head>
	<body>
		<h3 align="center">文件上传失败!</h3>
	</body>
</html>

welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Welcome</title>
	</head>
	<body>
		<h3 align="center">文件上传成功!</h3>
	</body>
</html>

おすすめ

転載: blog.csdn.net/qq_44965393/article/details/112189637