Filenames¶
By default, Vidispine names new files according to site-id-
number**``.``**extension,
all in one folder.
This pattern can be overridden. This section describes three very different ways.
Using a tree structure for files¶
Putting all files in the same directory of a storage can cause degraded
performance on some file systems. By setting the configuration property
fileHierarchy
, the naming convention is changed to site-id -
number1 /
number2 .
extension. The number set in
fileHierarchy
controls the size of number2. Example:
fileHierarchy not set, or 0 |
fileHierarchy =100 |
fileHierarchy =1000 |
VX-7.mp4 |
VX-0/07.mp4 |
VX-0/007.mp4 |
VX-47232.mp4 |
VX-472/32.mp4 |
VX-47/232.mp4 |
Note that the splitting into subdirectories is currently only done in one
level, so no VX-4/72/32.mp4
.
The configuration property may be changed at any time, but old files will not be renamed.
Storage name rules¶
A storage name rule dictates the filename that the file of a particular shape should have on a certain storage. Note that these rules doesn’t make sure a file is actually located on a storage, it just says what filename a file should have if it is located on that storage. Storage name rules are often used together with storage rules
Naming files on storage¶
The default naming convention of can be overridden on a per-storage basis by associating a JavaScript script to the storage.
The script will be invoked whenever a file needs to be created on the storage.
Setting the script¶
The JavaScript is stored as metadata filenameScript
to the storage. That
is, the code is set using PUT /storage/(storage-id}/metadata/filenameScript
.
If using curl, use --data-binary
instead of -d
to make sure all
new-line characters are kept.
Input¶
In the execution context of the script, there is a variable named context
,
which has the following functions:
-
context.
getShape
()¶ Returns a ShapeType (see Vidispine XSDs) object.
For example, to get the essence version, use
context.getShape().getEssenceVersion()
. Can returnnull
.
-
context.
getJobMetadata
()¶ Returns a
java.util.Map<String,String>
. Can benull
.
-
context.
getItem
()¶ Returns an ItemType, which is the same output as
GET /item/(item-id)?content=metadata,shape,access,external
. Can returnnull
.
-
context.
getStorage
()¶ Returns a StorageType.
-
context.
getComponent
()¶ Returns a ComponentType. Can return
null
.
-
context.
getExtension
()¶ Returns the suggested extension for the file. Can return
null
.
-
context.
getFileId
()¶ Returns the file id of the file to be created.
-
context.
getTags
()¶ Returns a
java.util.Collection<String>
of the shape tags of the shape the file belongs to.
-
context.
getOriginalFilename
()¶ Returns the original filename that was used when item was imported.
-
context.
getOriginalComponentFilename
()¶ Returns the original filename that was used when component was created.
New in version 4.12.
-
context.
getChannel
()¶ Most of the time this will return null, except when you want to split audio channels to separate files.
New in version 4.1.
-
context.
getJobId
()¶ Returns the job id.
New in version 4.12.
-
context.
getJobType
()¶ Returns the job type.
New in version 4.12.
Output¶
The script should return (last value) the file name of the file.
Existing file names¶
If the suggested file name is already in use on the Storage, the script will be called again, up to 10 times. The new invocations will run in the same context as the previous, so it is possible to store information, e.g. sequence numbers, to not repeat the same file name.
Example¶
var l = "foobar-"+context.getStorage().getId()+"/"+context.getFileId();
if (context.getExtension() != null)
l += "."+context.getExtension();