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 package fr.paris.lutece.plugins.archive.util;
35
36 import fr.paris.lutece.plugins.archive.business.ArchiveItem;
37 import fr.paris.lutece.plugins.archive.business.ArchiveItemHome;
38 import fr.paris.lutece.plugins.archive.service.archive.ArchivePlugin;
39 import fr.paris.lutece.portal.service.message.AdminMessage;
40 import fr.paris.lutece.portal.service.message.AdminMessageService;
41 import fr.paris.lutece.portal.service.plugin.Plugin;
42 import fr.paris.lutece.portal.service.plugin.PluginService;
43 import fr.paris.lutece.portal.service.util.AppLogService;
44
45 import java.io.File;
46 import java.io.FileInputStream;
47 import java.io.IOException;
48 import java.io.OutputStream;
49
50 import javax.servlet.http.HttpServletRequest;
51 import javax.servlet.http.HttpServletResponse;
52
53
54
55
56
57
58
59 public final class DoDownloadArchive
60 {
61
62
63
64 private DoDownloadArchive( )
65 {
66 }
67
68
69
70
71
72
73
74
75 public static String doDownloadFile( HttpServletRequest request, HttpServletResponse response )
76 {
77 Plugin plugin = PluginService.getPlugin( ArchivePlugin.PLUGIN_NAME );
78 String strArchiveItemKey = request.getParameter( ArchiveConstants.PARAM_ARCHIVE_ITEM_KEY );
79 int nArchiveItemKey = -1;
80
81 try
82 {
83 nArchiveItemKey = Integer.parseInt( strArchiveItemKey );
84 }
85 catch ( NumberFormatException ne )
86 {
87 AppLogService.error( ne );
88 }
89
90 ArchiveItem archiveItem = ArchiveItemHome.findByPrimaryKey( nArchiveItemKey, plugin );
91
92 if ( archiveItem != null )
93 {
94 File file = new File( ArchiveUtil.getFilePath( archiveItem ) );
95
96 if ( file.exists( ) )
97 {
98 OutputStream os = null;
99 FileInputStream bis = null;
100
101 try
102 {
103 response.setHeader( "Content-Disposition",
104 "attachment ;filename=\"" + archiveItem.getArchiveName( ) + "\"" );
105 response.setHeader( "Pragma", "public" );
106 response.setHeader( "Expires", "0" );
107 response.setHeader( "Cache-Control", "must-revalidate,post-check=0,pre-check=0" );
108
109 response.setContentType( archiveItem.getArchiveMimeType( ) );
110
111 os = response.getOutputStream( );
112 bis = new FileInputStream( ArchiveUtil.getFilePath( archiveItem ) );
113
114 byte[] tab = new byte[ArchiveConstants.CONSTANTE_FILE_BUFFER];
115 int read = -1;
116
117 do
118 {
119 read = bis.read( tab );
120
121 if ( read > 0 )
122 {
123 os.write( tab, 0, read );
124 }
125 }
126 while ( read > 0 );
127 }
128 catch ( IOException e )
129 {
130 AppLogService.error( e );
131 }
132
133 finally
134 {
135 try
136 {
137 bis.close( );
138 os.close( );
139 }
140 catch ( IOException e )
141 {
142 AppLogService.error( e );
143 }
144 }
145 }
146 }
147
148 return AdminMessageService.getMessageUrl( request, ArchiveConstants.MESSAGE_ERROR_DURING_DOWNLOAD_FILE,
149 AdminMessage.TYPE_STOP );
150 }
151 }