Simulez un seul téléchargement de fichier de 2 manières, l'effet est le suivant
Les étapes de développement sont les suivantes :
1. Créez un nouveau projet Web et importez les fichiers jar requis pour le téléchargement des fichiers struts2, comme indiqué ci-dessous.
Structure du répertoire
2. Créer une nouvelle action
première voie
Copiez le code comme suit :
paquet com.ljq.action ;
importer java.io.File ;
importer org.apache.commons.io.FileUtils ;
importer org.apache.struts2.ServletActionContext ;
importer com.opensymphony.xwork2.ActionContext ;
importer com.opensymphony.xwork2.ActionSupport ;
@SuppressWarnings("série")
la classe publique UploadAction étend ActionSupport{
Image de fichier privé ; //fichier téléchargé
chaîne privée imageFileName ; //Nom du fichier
chaîne privée imageContentType ; //Type de fichier
public Stringexecute() lève une exception {
Chaîne realpath = ServletActionContext.getServletContext().getRealPath("/images");
//D:/apache-tomcat-6.0.18/webapps/struts2_upload/images
System.out.println("realpath: "+realpath);
si (image != null) {
Fichier savefile = nouveau fichier (nouveau fichier (chemin réel), imageFileName);
si (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
FileUtils.copyFile(image, fichier de sauvegarde);
ActionContext.getContext().put("message", "Fichier téléchargé avec succès");
}
renvoyer « succès » ;
}
Fichier public getImage() {
renvoyer l'image ;
}
public void setImage (image de fichier) {
this.image = image;
}
chaîne publique getImageFileName() {
renvoie le nom du fichier image ;
}
public void setImageFileName (String imageFileName) {
this.imageFileName = imageFileName ;
}
chaîne publique getImageContentType() {
renvoie imageContentType ;
}
public void setImageContentType (String imageContentType) {
this.imageContentType = imageContentType;
}
}
Deuxième façon
Copiez le code comme suit :
paquet com.ljq.action ;
importer java.io.File ;
importer java.io.FileInputStream ;
importer java.io.FileOutputStream ;
importer java.io.IOException ;
importer org.apache.struts2.ServletActionContext ;
importer com.opensymphony.xwork2.ActionSupport ;
@SuppressWarnings("série")
la classe publique UploadAction2 étend ActionSupport {
//Encapsuler les attributs du domaine du fichier téléchargé
Image de fichier privé ;
//Encapsuler les attributs du type de fichier téléchargé
chaîne privée imageContentType ;
//Encapsuler les attributs du nom du fichier téléchargé
chaîne privée imageFileName ;
// Accepter les propriétés d'injection de dépendances
chaîne privée savePath ;
@Outrepasser
chaîne publique exécuter() {
FileOutputStream fos = null ;
FileInputStream fis = null ;
essayer {
//Créer un flux de sortie de fichier
System.out.println(getSavePath());
fos = new FileOutputStream(getSavePath() + "//" + getImageFileName());
//Créer un flux de téléchargement de fichiers
fis = nouveau FileInputStream(getImage());
octet[] tampon = nouvel octet[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} attraper (Exception e) {
System.out.println("Échec du téléchargement du fichier");
e.printStackTrace();
} enfin {
fermer(fos, fis);
}
retourner le SUCCÈS ;
}
/**
* Retournez à l'emplacement de sauvegarde du fichier téléchargé
*
* @retour
*/
public String getSavePath() lève une exception{
return ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
Fichier public getImage() {
renvoyer l'image ;
}
public void setImage (image de fichier) {
this.image = image;
}
chaîne publique getImageContentType() {
renvoie imageContentType ;
}
public void setImageContentType (String imageContentType) {
this.imageContentType = imageContentType;
}
chaîne publique getImageFileName() {
renvoie le nom du fichier image ;
}
public void setImageFileName (String imageFileName) {
this.imageFileName = imageFileName ;
}
private void close (FileOutputStream fos, FileInputStream fis) {
si (fis != nul) {
essayer {
fis.close();
} catch (IOException e) {
System.out.println("FileInputStream n'a pas pu se fermer");
e.printStackTrace();
}
}
si (fos != nul) {
essayer {
fos.close();
} catch (IOException e) {
System.out.println("FileOutputStream n'a pas pu se fermer");
e.printStackTrace();
}
}
}
}
fichier de configuration struts.xml
Copiez le code comme suit :
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE se pavane en PUBLIC
"-//Apache Software Foundation//Configuration DTD Struts 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<entretoises>
<!-- Cet attribut spécifie le suffixe de requête qui doit être traité par Struts2. La valeur par défaut de cet attribut est action, c'est-à-dire que toutes les requêtes correspondant à *.action sont traitées par Struts2.
Si l'utilisateur doit spécifier plusieurs suffixes de requête, séparez-les par des virgules (,). -->
<constant name="struts.action.extension" value="do" />
<!-- Définissez si le navigateur met en cache le contenu statique. La valeur par défaut est true (utilisée dans l'environnement de production). Il est préférable de la désactiver pendant la phase de développement.
<constant name="struts.serve.static.browserCache" value="false" />
<!-- Lorsque le fichier de configuration Struts est modifié, que le système recharge automatiquement le fichier, la valeur par défaut est false (utilisée dans l'environnement de production), il est préférable de l'activer pendant la phase de développement -->
<constant name="struts.configuration.xml.reload" value="true" />
<!-- Utilisé en mode développement, pour pouvoir imprimer des messages d'erreur plus détaillés -->
<constant name="struts.devMode" value="true" />
<!--Thème d'affichage par défaut-->
<constant name="struts.ui.theme" value="simple" />
<!--<constant name="struts.objectFactory" value="spring" />-->
<!--Solution aux codes tronqués-->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- Spécifiez le nombre maximum d'octets autorisés pour les fichiers téléchargés. La valeur par défaut est 2097152(2M) -->
<constant name="struts.multipart.maxSize" value="10701096"/>
<!-- Définit le dossier temporaire pour les fichiers téléchargés, javax.servlet.context.tempdir est utilisé par défaut -->
<constant name="struts.multipart.saveDir " value="d:/tmp" />
<package name="upload" namespace="/upload" extends="struts-default">
<action name="*_upload" méthode="{1}">
<result name="success">/WEB-INF/page/message.jsp</result>
</action>
</paquet>
<package name="upload2" extends="struts-default">
<action name="upload2" method="execute">
<!-- Définir dynamiquement la valeur de l'attribut 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">
<!-- Filtrage de fichiers -->
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<!-- Taille du fichier, en octets -->
<param name="maximumSize">1025956</param>
</intercepteur-réf>
<!-- L'intercepteur par défaut doit être placé après fileUpload, sinon il sera invalide -->
<interceptor-ref name="defaultStack" />
</action>
</paquet>
</struts>
Télécharger la page du formulaire
Copiez le code comme suit :
<%@ 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>
<tête>
<title>Téléchargement de fichiers</title>
<méta http-equiv="pragma" content="no-cache">
<méta http-equiv="cache-control" content="no-cache">
<méta http-equiv="expires" content="0">
</tête>
<corps>
<!-- ${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" method="post">
Fichier :<input type="file" name="image">
<input type="submit" value="Télécharger" />
</form>
<br/>
<s:erreur de terrain />
</corps>
</html>
Afficher la page des résultats
Copiez le code comme suit :
<%@ 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>
<tête>
<title>Téléchargement réussi</title>
<méta http-equiv="pragma" content="no-cache">
<méta http-equiv="cache-control" content="no-cache">
<méta http-equiv="expires" content="0">
</tête>
<corps>
Téléchargement réussi !
<br/><br/>
<!-- ${pageContext.request.contextPath} chemin de déploiement Tomcat,
Par exemple : D:/apache-tomcat-6.0.18/webapps/struts2_upload/ -->
<img src="${pageContext.request.contextPath}/<s:property value="'images/'+imageFileName"/>">
<s:debug></s:debug>
</corps>
</html>