Имитируйте загрузку одного файла двумя способами, эффект следующий:
Этапы разработки следующие:
1. Создайте новый веб-проект и импортируйте файлы jar, необходимые для загрузки файлов struts2, как показано ниже.
Структура каталогов
2. Создать новое действие
первый способ
Скопируйте код кода следующим образом:
пакет com.ljq.action;
импортировать java.io.File;
импортировать org.apache.commons.io.FileUtils;
импортировать org.apache.struts2.ServletActionContext;
импортировать com.opensymphony.xwork2.ActionContext;
импортировать com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("последовательный")
публичный класс UploadAction расширяет ActionSupport{
личное изображение файла // загруженный файл;
частная строка imageFileName; // имя файла;
частная строка imageContentType //Тип файла;
public String Execute() выдает исключение {
Строковый реальный путь = ServletActionContext.getServletContext().getRealPath("/images");
//D:/apache-tomcat-6.0.18/webapps/struts2_upload/images
System.out.println("realpath: "+realpath);
если (изображение != ноль) {
Файл savefile = новый файл (новый файл (реальный путь), imageFileName);
если (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
FileUtils.copyFile(изображение, файл сохранения);
ActionContext.getContext().put("сообщение", "Файл успешно загружен");
}
вернуть «успех»;
}
публичный файл getImage() {
вернуть изображение;
}
public void setImage (изображение файла) {
это.изображение = изображение;
}
публичная строка getImageFileName() {
вернуть имя_файла_изображения;
}
public void setImageFileName (String imageFileName) {
this.imageFileName = imageFileName;
}
публичная строка getImageContentType() {
вернуть тип изображенияContentType;
}
public void setImageContentType (String imageContentType) {
this.imageContentType = imageContentType;
}
}
Второй способ
Скопируйте код кода следующим образом:
пакет com.ljq.action;
импортировать java.io.File;
импортировать java.io.FileInputStream;
импортировать java.io.FileOutputStream;
импортировать java.io.IOException;
импортировать org.apache.struts2.ServletActionContext;
импортировать com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("последовательный")
публичный класс UploadAction2 расширяет ActionSupport {
//Инкапсулируем атрибуты домена загруженного файла
личное изображение файла;
//Инкапсулируем атрибуты типа загруженного файла
частная строка imageContentType;
//Инкапсулируем атрибуты имени загруженного файла
частная строка imageFileName;
//Принимаем свойства внедрения зависимостей
частная строка savePath;
@Override
публичная строка выполнить() {
FileOutputStream fos = null;
FileInputStream фис = ноль;
пытаться {
//Создаем поток вывода файла
System.out.println(getSavePath());
fos = новый FileOutputStream(getSavePath() + "//" + getImageFileName());
//Создаем поток загрузки файлов
фис = новый FileInputStream(getImage());
буфер байт[] = новый байт[1024];
интервал лен = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(буфер, 0, длина);
}
} catch (Исключение е) {
System.out.println("Не удалось загрузить файл");
е.printStackTrace();
} окончательно {
закрыть(фос, фис);
}
вернуть УСПЕХ;
}
/**
* Возврат к месту сохранения загруженного файла.
*
* @возвращаться
*/
public String getSavePath() выдает исключение {
return ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath (String savePath) {
this.savePath = savePath;
}
публичный файл getImage() {
вернуть изображение;
}
public void setImage (изображение файла) {
это.изображение = изображение;
}
публичная строка getImageContentType() {
вернуть тип изображенияContentType;
}
public void setImageContentType (String imageContentType) {
this.imageContentType = imageContentType;
}
публичная строка getImageFileName() {
вернуть имя_файла_изображения;
}
public void setImageFileName (String imageFileName) {
this.imageFileName = imageFileName;
}
Private void close (FileOutputStream fos, FileInputStream fis) {
если (фис != ноль) {
пытаться {
фис.закрыть();
} catch (IOException e) {
System.out.println("FileInputStream не удалось закрыть");
е.printStackTrace();
}
}
если (fos != ноль) {
пытаться {
фос.закрыть();
} catch (IOException e) {
System.out.println("FileOutputStream не удалось закрыть");
е.printStackTrace();
}
}
}
}
файл конфигурации struts.xml
Скопируйте код кода следующим образом:
<?xml version="1.0"coding="UTF-8" ?>
<!DOCTYPE Struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<стойки>
<!-- Этот атрибут указывает суффикс запроса, который должен быть обработан Struts2. Значением этого атрибута по умолчанию является action, то есть все запросы, соответствующие *.action, обрабатываются Struts2.
Если пользователю необходимо указать несколько суффиксов запроса, разделите их запятыми (,). -->
<constant name="struts.action.extension" value="do" />
<!-- Установите, кэширует ли браузер статический контент. Значение по умолчанию — true (используется в производственной среде). Лучше всего отключить его на этапе разработки.
<constant name="struts.serve.static.browserCache" value="false" />
<!-- При изменении файла конфигурации struts, будет ли система автоматически перезагружать файл, значение по умолчанию — false (используется в производственной среде), лучше всего включить его на этапе разработки -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- Используется в режиме разработки, чтобы можно было распечатать более подробные сообщения об ошибках -->
<constant name="struts.devMode" value="true" />
<!--Тема просмотра по умолчанию-->
<constant name="struts.ui.theme" value="simple" />
<!--<constant name="struts.objectFactory" value="spring" />-->
<!--Решение проблемы с искаженными кодами-->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- Укажите максимальное количество байт, разрешенное для загружаемых файлов. Значение по умолчанию: 2097152(2M) -->
<constant name="struts.multipart.maxSize" value="10701096"/>
<!-- Установите временную папку для загружаемых файлов, по умолчанию используется javax.servlet.context.tempdir -->
<constant name="struts.multipart.saveDir " value="d:/tmp" />
<package name="upload" namespace="/upload" расширяется="struts-default">
<action name="*_upload" метод="{1}">
<result name="success">/WEB-INF/page/message.jsp</result>
</действие>
</пакет>
<имя пакета="upload2" расширяет="struts-default">
<action name="upload2" метод="выполнить">
<!-- Динамически установить значение атрибута savePath -->
<param name="savePath">/images</param>
<result name="success">/WEB-INF/page/message.jsp</result>
<result name="input">/upload/upload.jsp</result>
<interceptor-ref name="fileUpload">
<!-- Фильтрация файлов -->
<param name="allowedTypes">изображение/bmp,изображение/png,изображение/gif,изображение/jpeg</param>
<!-- Размер файла, в байтах -->
<param name="maximumSize">1025956</param>
</перехватчик-ref>
<!-- Перехватчик по умолчанию должен быть размещен после fileUpload, иначе он будет недействителен -->
<interceptor-ref name="defaultStack" />
</действие>
</пакет>
</struts>
Загрузить страницу формы
Скопируйте код кода следующим образом:
<%@ page Language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<голова>
<title>Загрузка файла</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</голова>
<тело>
<!-- ${pageContext.request.contextPath}/upload/execute_upload.do -->
<!-- ${pageContext.request.contextPath}/upload2/upload2.do -->
<form action="${pageContext.request.contextPath}/upload2/upload2.do"
enctype="multipart/form-data" метод="post">
Файл:<input type="file" name="image">
<input type="submit" value="Загрузить" />
</форма>
<br/>
<s:полеошибка />
</тело>
</html>
Показать страницу результатов
Скопируйте код кода следующим образом:
<%@ page Language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<голова>
<title>Загрузка прошла успешно</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</голова>
<тело>
Загрузка прошла успешно!
<br/><br/>
<!-- ${pageContext.request.contextPath} путь развертывания tomcat,
Например: D:/apache-tomcat-6.0.18/webapps/struts2_upload/ -->
<img src="${pageContext.request.contextPath}/<s:property value="'images/'+imageFileName"/>">
<s:debug></s:debug>
</тело>
</html>