Blob store implementation for storing content inside models public
folders.
Key conceptions:
- relative path created in format modelName|relativePathFromModelDir to hide real file place from client
- OS user temp folder used for store temporary content
- delete operation is forbidden since models must be under version control
Used in:
- ubm_form for store form def & js inside /public/forms
- ubm_diagrams for store diagram inside /public/erdiagrams
- ubs_report for store report template inside /public/reports
- e.t.c.
Singleton
# new FileSystemBlobStore (storeConfig: object, appInstance: ServerApp, sessionInstance: UBSession)
Members
# fullStorePath instance
Normalized path to the store root
# LUCount instance
Logical Unit Count for store. If > 0 then files are stored inside Logical Unit
sub-folders /LU01
, /LU02
etc
Write operations works with last LU folder
Methods
# doDeletion (attribute: UBEntityAttribute, ID: number, blobInfo: BlobStoreItem) instance
Arguments:
attribute
: UBEntityAttributeID
: numberblobInfo
: BlobStoreItem
# fillResponse (requestParams: BlobStoreRequest, blobInfo: BlobStoreItem, req: THTTPRequest, resp: THTTPResponse, preventChangeRespOnErroropt: boolean) → boolean instance
Fill HTTP response for getDocument request
Arguments:
requestParams
: BlobStoreRequestblobInfo
: BlobStoreItemDocument metadata. Not used for dirty requests
req
: THTTPRequestresp
: THTTPResponsepreventChangeRespOnError
= false: booleanIf
true
- prevents sets resp status code - just returns false on error
# genNewPlacement (attribute: UBEntityAttribute, dirtyItem: BlobStoreItem, ID: number) → Object instance
Calculate a relative path & file name for a new BLOB item. If new folder dose not exists - create it
Arguments:
attribute
: UBEntityAttributedirtyItem
: BlobStoreItemID
: number
# getContent (request: BlobStoreRequest, blobInfo: BlobStoreItem, optionsopt: object) → string | UBMail.TubSendMailAttachKind.Buffer | ArrayBuffer | null instance
Retrieve BLOB content from blob store.
Arguments:
request
: BlobStoreRequestblobInfo
: BlobStoreItemJSON retrieved from a DB.
options
: object
# getContentFilePath (request: BlobStoreRequest, blobInfo: BlobStoreItem) → string instance
Returns full path to the file with BLOB content
Arguments:
request
: BlobStoreRequestblobInfo
: BlobStoreItemJSON retrieved from a DB
# getPermanentFileName (blobItem: BlobStoreItem, requestopt: BlobStoreRequest) → string instance
For file based store:
- store.path + relativePath + fileName
Return:
In case of item not exists - return empty string ''
Arguments:
blobItem
: BlobStoreItemrequest
: BlobStoreRequestOptional request to get a revision
# persist (attribute: UBEntityAttribute, ID: number, dirtyItem: BlobStoreItem, newRevision: number) → BlobStoreItem | null instance
Move content defined by dirtyItem
from temporary to permanent store.
TIPS: in v0 (UB<5) if file updated then implementation takes a store from old item.
This raise a problem - old store may be in archive state (readonly)
So in UB5 we change implementation to use a store defined in the attribute for new items
Return a new attribute content which describe a place of the BLOB in permanent store
Arguments:
attribute
: UBEntityAttributeID
: numberdirtyItem
: BlobStoreItemnewRevision
: number
# saveContentToTempStore (request: BlobStoreRequest, attribute: UBEntityAttribute, content: ArrayBuffer) → BlobStoreItem instance
Arguments:
request
: BlobStoreRequestRequest params
attribute
: UBEntityAttributecontent
: ArrayBuffer| THTTPRequest