Bonjour,
J'ai déja fait un upload de fichier avec Spring webflow 2.0.8. Cependant, pour le sauvegarder en BDD avec hibernate, je ne sais pas.
La solution consiste à utiliser le jar commons-fileupload 1.2.1 d'Apache.
Pour commencer, il faut définir un resolver pour les multipartFile :
1 2
| <!-- permet de charger fes fichiers -->
<bean id ="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> |
Dans le flow :
1 2 3 4 5 6
|
<view-state id="maBeeeelleView" model="monModel" view="maJsp">
<transition on="importer" to="maBeeeelleView" validate="false">
<evaluate expression="importFichierService.importer( monModel, messageContext)"/>
</transition>
</view-state> |
L'objet monModel, instance de la classe MonModel, a été initialisé avant dans mon flow.
La classe model :
1 2 3 4 5 6 7 8 9 10 11
| public class MonModel {
private byte[] fileContent;
public byte[] getFileContent() {
return fileContent;
public void setFile(MultipartFile file) throws IOException {
this.fileContent = file.getBytes();
}
} |
Le setter multipartfile est utilisé par webflow pour charger le fichier dans la classe Model. Cependant, mettre un attribut MultipartFile dans le model ne fonctionne pas (pourquoi ? je ne sais pas), donc il est transformé en tableau de byte.
dans la jsp
1 2 3 4 5 6
|
<form:form modelAttribute="monModel" enctype="multipart/form-data">
[...]
<input type="file" name="file" id=" fichier" />
[...]
et le bouton importer... |
et enfin le traitement du fichier dans mon service spring :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class ImportFichierService implements IImportFichierService {
public void importer(MonModel monModel ,OffrePromo offrePromo , MessageContext messageContext) throws Exception
{
byte[] fileContent = monModel.getFileContent();
// fichier vide ?
if( fileContent == null){
messages.addMessage(
new MessageBuilder()
.error()
.source("là où tu veux afficher le message d'erreur dans la jsp")
.text("fichier vide")
.build());
}
InputStream inputStream = null;
try
{
inputStream = new ByteArrayInputStream(fileContent);
[...] tu fais ce que tu veux avec l'inputstream
}
} |
bonne chance pour le reste.
Partager