This plugin handles the big data storage, in database or file system.
Configure the private key for the signature in the file blobstore_context.xml :
<bean id="blobstore.hashService" class="fr.paris.lutece.util.signrequest.security.Sha1HashService" /> <bean id="blobstore.requestAuthenticator" class="fr.paris.lutece.util.signrequest.RequestHashAuthenticator" > <property name="hashService" ref="blobstore.hashService" /> <property name="signatureElements" > <list> <value>blobstore</value> <value>blob_key</value> </list> </property> <property name="privateKey"> <value>change me</value> </property> </bean>
There are two ways of using the plugin-blobstore.
- A: Use as a FileService via the blobStoreFileServiceProvider (recommanded)
- B: Use in addition of a plugin in which the latter will be able to store big data in a distinct database or in file system.
Each data is linked to an ID blob which is generated randomly. The use of the library java.util.UUID ensures the unicity of the ids.
A/ Use the blobStoreFileServiceProvider The fileStoreService can be added to the Home class :private static IFileStoreServiceProvider _fileStoreService = FileService.getInstance( ).getFileStoreServiceProvider( "blobStoreProvider");
...
// get the file in multipart request and store it
IFileStoreServiceProvider fileStoreService = MyHome.getFileStoreServiceProvider( );
FileItem file = multipartRequest.getFile( "file" );
if ( file != null && file.getSize( ) > 0 )
{
try
{
String strFileStoreKey = fileStoreService.storeFileItem( file );
...
// get an URL for display
String strFileUrl = fileStoreService.getFileDownloadUrlBO( strFileKey );
...
First of all, create a new service that has a private attribute type BlobStoreService :
public class MyPluginService
{
private BlobStoreService _blobStoreService;
/**
* Set the BlobStoreService
* @param blobStoreService the {@link BlobStoreService}
*/
public void setBlobStoreService( BlobStoreService blobStoreService )
{
_blobStoreService = blobStoreService;
}
.
.
.
}
Next, define the service in the XML file of the plugin (ex : webapp/WEB-INF/plugins/myplugin_context.xml). It is in this file where the stored data type is defined.
To store in database (modify the bold words) :
<bean id="myplugin.blobStoreService" class="fr.paris.lutece.plugins.blobstore.service.database.DatabaseBlobStoreService"> <property name="name" value="myplugin.blobStoreService" /> </bean> <bean id="myplugin.myPluginService" class="fr.paris.lutece.plugins.myplugin.service.MyPluginService"> <property name="blobStoreService" ref="myplugin.blobStoreService" /> </bean>
To store in file system (modify the bold words) :
<bean id="myplugin.blobStoreService" class="fr.paris.lutece.plugins.blobstore.service.filesystem.FileSystemBlobStoreService"> <property name="name" value="<strong>myplugin</strong>.blobStoreService" /> <property name="basePath" value="D:\data\blobstore" /> <property name="depth" value="1" /> </bean> <bean id="myplugin.myPluginService" class="fr.paris.lutece.plugins.myplugin.service.MyPluginService"> <property name="blobStoreService" ref="myplugin.blobStoreService" /> </bean>
The API of BlobStoreService offers several functionnalities that allows to implements basic operation?
To store a blob with an array of bytes or with an InputStream :
public void storeBlob( byte[] blob )
{
// Plugin operation
...
_blobStoreService.store( blob );
...
}
public void storeBlob( InputStream blob )
{
// Plugin operation
...
_blobStoreService.storeInputStream( blob );
...
}
To modify a blob with an array of bytes or with an InputStream :
public void updateBlob( String strKey, byte[] blob )
{
// Plugin operation
...
_blobStoreService.update( strKey, blob );
...
}
public void updateBlob( String strKey, InputStream blob )
{
// Plugin operation
...
_blobStoreService.updateInputStream( strKey, blob );
...
}
To delete a blob :
public void deleteBlob( String strKey )
{
// Plugin operation
...
_blobStoreService.delete( strKey );
...
}
It is also possible to retrieve the URL to download the stored file :
public String getBlobUrl( String strKey )
{
// Plugin operation
...
String strBlobUrl = _blobStoreService.getBlobUrl( strKey );
...
}
public String getFileUrl( String strKey )
{
// Plugin operation
...
String strFileUrl = _blobStoreService.getFileUrl( strKey );
...
}