Bonjour,
Je souhaite dans ma page JSF télécharger des fichiers situés dans le dossier "documents" et uploader des fichiers dans ce même dossier.
Pour cela j'ai la page JSF suivante :
Ainsi que les 2 beans suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Télécharger des documents :<br/> <h:dataTable value="#{tacheDetailBean.tache.documents}" var="document" id="tableDocuments"> <h:column> <h:form id="form"> <p:commandButton id="downloadLink" value="#{document.nom} (#{document.user.prenom} #{document.user.nom})" ajax="false" onclick="PrimeFaces.monitorDownload(start, stop)" icon="ui-icon-arrowthichk-s"> <p:fileDownload value="#{downloadBean.file}" /> </p:commandButton> </h:form> </h:column> </h:dataTable> <br/> Uploader des fichiers :<br/> <p:fileUpload fileUploadListener="#{uploadBean.upload}" allowTypes="/(\.|\/)(gif|jpe?g|png|pdf)$/" sizeLimit="100000"/>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 package control; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.inject.Named; import org.primefaces.event.FileUploadEvent; @Named @SessionScoped public class UploadBean implements Serializable { public void upload(FileUploadEvent event) { FacesMessage msg = new FacesMessage("Success! ", event.getFile().getFileName() + " is uploaded."); FacesContext.getCurrentInstance().addMessage(null, msg); // Do what you want with the file try { copyFile(event.getFile().getFileName(), event.getFile().getInputstream()); } catch (IOException e) { e.printStackTrace(); } } public void copyFile(String fileName, InputStream in) { try { // write the inputStream to a FileOutputStream OutputStream out = new FileOutputStream(new File("./documents/" + fileName)); int read = 0; byte[] bytes = new byte[1024]; while ((read = in.read(bytes)) != -1) { out.write(bytes, 0, read); } in.close(); out.flush(); out.close(); System.out.println("New file created!"); } catch (IOException e) { System.out.println(e.getMessage()); } } }Le téléchargement me donne une nullpointerexception et l'upload ne fait rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package control; import java.io.InputStream; import javax.faces.context.FacesContext; import javax.servlet.ServletContext; import org.primefaces.model.DefaultStreamedContent; import org.primefaces.model.StreamedContent; public class DownloadBean { private final StreamedContent file; public DownloadBean() { InputStream stream = ((ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream("/documents/logofcm.png"); file = new DefaultStreamedContent(stream, "image/png", "logofcm.png"); } public StreamedContent getFile() { return file; } }
Merci d'avance pour votre aide.
Vivien
Partager