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.directories.web;
35
36 import fr.paris.lutece.plugins.directories.business.DirectoryResponse;
37 import fr.paris.lutece.plugins.directories.business.DirectoryResponseHome;
38 import fr.paris.lutece.plugins.directories.util.DirectoriesUtils;
39 import fr.paris.lutece.plugins.genericattributes.business.Response;
40 import fr.paris.lutece.plugins.genericattributes.business.ResponseHome;
41 import fr.paris.lutece.portal.business.file.File;
42 import fr.paris.lutece.portal.business.file.FileHome;
43 import fr.paris.lutece.portal.business.physicalfile.PhysicalFile;
44 import fr.paris.lutece.portal.business.physicalfile.PhysicalFileHome;
45 import fr.paris.lutece.portal.service.message.AdminMessage;
46 import fr.paris.lutece.portal.service.message.AdminMessageService;
47 import fr.paris.lutece.portal.service.util.AppLogService;
48 import fr.paris.lutece.util.filesystem.FileSystemUtil;
49 import java.io.IOException;
50 import java.io.OutputStream;
51 import javax.servlet.http.HttpServletRequest;
52 import javax.servlet.http.HttpServletResponse;
53
54
55
56
57
58
59 public final class DoDownloadFile
60 {
61 private static final String PARAMETER_ID_FILE = "id_file";
62 private static final String PARAMETER_ID_RESPONSE = "id_response";
63 private static final String MESSAGE_ERROR_DURING_DOWNLOAD_FILE = "error";
64
65
66
67
68 private DoDownloadFile( )
69 {
70 }
71
72
73
74
75
76
77
78
79
80
81
82 public static String doDownloadFile( HttpServletRequest request, HttpServletResponse response )
83 {
84 String strIdFile = request.getParameter( PARAMETER_ID_FILE );
85 int nIdFile = Integer.parseInt( strIdFile );
86 String strIdResponse = request.getParameter( PARAMETER_ID_RESPONSE );
87 int nIdResponse = Integer.parseInt( strIdResponse );
88 DirectoryResponse directoryResponse = DirectoryResponseHome.getDirectoryResponsesListByIdResponse( nIdResponse );
89 if ( directoryResponse != null )
90 {
91 Response genAttResponse = ResponseHome.findByPrimaryKey( directoryResponse.getIdResponse( ) );
92 if ( genAttResponse.getFile( ) != null && genAttResponse.getFile( ).getIdFile( ) == nIdFile )
93 {
94 File file = FileHome.findByPrimaryKey( nIdFile );
95 PhysicalFile physicalFile = ( file != null ) ? PhysicalFileHome.findByPrimaryKey( file.getPhysicalFile( ).getIdPhysicalFile( ) ) : null;
96 if ( physicalFile != null )
97 {
98 try
99 {
100 byte [ ] byteFileOutPut = physicalFile.getValue( );
101 DirectoriesUtils.addHeaderResponse( response, file.getTitle( ) );
102 String strMimeType = file.getMimeType( );
103 if ( strMimeType == null )
104 {
105 strMimeType = FileSystemUtil.getMIMEType( file.getTitle( ) );
106 }
107 response.setContentType( strMimeType );
108 response.setContentLength( byteFileOutPut.length );
109 OutputStream os = response.getOutputStream( );
110 os.write( byteFileOutPut );
111 os.close( );
112 }
113 catch( IOException e )
114 {
115 AppLogService.error( e );
116 }
117 }
118 }
119 }
120 return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_DURING_DOWNLOAD_FILE, AdminMessage.TYPE_STOP );
121 }
122 }