Difference between revisions of "API:EPrints/DataObj/File"

From EPrints Documentation
Jump to: navigation, search
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
<!-- Pod2Wiki=_preamble_  
 
<!-- Pod2Wiki=_preamble_  
This page has been automatically generated from the EPrints 3.2 source. Any wiki changes made between the 'Pod2Wiki=*' and 'Edit below this comment' comments will be lost.
+
This page has been automatically generated from the EPrints 3.4 source. Any wiki changes made between the 'Pod2Wiki=*' and 'Edit below this comment' comments will be lost.
  -->{{API}}{{Pod2Wiki}}{{API:Source|file=EPrints/DataObj/File.pm|package_name=EPrints::DataObj::File}}[[Category:API|File]]<div><!-- Edit below this comment -->
+
  -->{{API}}{{Pod2Wiki}}{{API:Source|file=EPrints/DataObj/File.pm|package_name=EPrints::DataObj::File}}[[Category:API|FILE]][[Category:API:EPrints/DataObj|FILE]]<div><!-- Edit below this comment -->
  
  
Line 17: Line 17:
 
<!-- Pod2Wiki=head_description -->
 
<!-- Pod2Wiki=head_description -->
 
==DESCRIPTION==
 
==DESCRIPTION==
This class contains the technical metadata associated with a file. A file is a sequence of bytes stored in the storage layer (a "stored object"). Utility methods for storing and retrieving the stored object from the storage layer are made available.
+
This class contains the technical metadata associated with a file. A file is a sequence of bytes stored in the storage layer (a "stored object"). Utility methods for storing and retrieving the stored object from the storage layer are made available.
  
Revision numbers on File work slightly differently to other objects. A File is only revised when it's stored object is changed and not when changes to it's metadata are made.
+
Revision numbers on File work slightly differently to other objects. A File is only revised when it's stored object is changed and not when changes to it's metadata are made.
  
 
This class is a subclass of [[API:EPrints/DataObj/SubObject|EPrints::DataObj::SubObject]].
 
This class is a subclass of [[API:EPrints/DataObj/SubObject|EPrints::DataObj::SubObject]].
Line 30: Line 30:
 
<!-- Pod2Wiki= -->
 
<!-- Pod2Wiki= -->
 
</div>
 
</div>
<!-- Pod2Wiki=head_core_fields -->
+
<!-- Pod2Wiki=head_core_metadata_fields -->
==CORE FIELDS==
+
==CORE METADATA FIELDS==
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<span style='display:none'>User Comments</span>
 
<span style='display:none'>User Comments</span>
Line 40: Line 40:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_fileid -->
 
<!-- Pod2Wiki=item_fileid -->
===fileid===
+
===fileid (counter)===
  
 
Unique identifier for this file.
 
Unique identifier for this file.
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
 
 
<!-- Pod2Wiki= -->
 
</div>
 
<!-- Pod2Wiki=item_rev_number -->
 
===rev_number (int)===
 
 
The number of the current revision of this file.
 
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 64: Line 52:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_datasetid -->
 
<!-- Pod2Wiki=item_datasetid -->
===datasetid===
+
===datasetid (id)===
  
 
Id of the dataset of the parent object.
 
Id of the dataset of the parent object.
Line 76: Line 64:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_objectid -->
 
<!-- Pod2Wiki=item_objectid -->
===objectid===
+
===objectid (int)===
  
 
Id of the parent object.
 
Id of the parent object.
Line 88: Line 76:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_filename -->
 
<!-- Pod2Wiki=item_filename -->
===filename===
+
===filename (id)===
  
 
Name of the file (may contain directory separators).
 
Name of the file (may contain directory separators).
Line 100: Line 88:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_mime_type -->
 
<!-- Pod2Wiki=item_mime_type -->
===mime_type===
+
===mime_type (id)===
  
 
MIME type of the file (e.g. "image/png").
 
MIME type of the file (e.g. "image/png").
Line 112: Line 100:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_hash -->
 
<!-- Pod2Wiki=item_hash -->
===hash===
+
===hash (id)===
  
 
Check sum of the file.
 
Check sum of the file.
Line 124: Line 112:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_hash_type -->
 
<!-- Pod2Wiki=item_hash_type -->
===hash_type===
+
===hash_type (id)===
  
 
Name of check sum algorithm used (e.g. "MD5").
 
Name of check sum algorithm used (e.g. "MD5").
Line 136: Line 124:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_filesize -->
 
<!-- Pod2Wiki=item_filesize -->
===filesize===
+
===filesize (bigint)===
  
 
Size of the file in bytes.
 
Size of the file in bytes.
Line 148: Line 136:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_mtime -->
 
<!-- Pod2Wiki=item_mtime -->
===mtime===
+
===mtime (timestamp)===
  
 
Last modification time of the file.
 
Last modification time of the file.
Line 160: Line 148:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_url -->
 
<!-- Pod2Wiki=item_url -->
===url===
+
===url (url)===
  
 
Virtual field for storing the file's URL.
 
Virtual field for storing the file's URL.
Line 172: Line 160:
 
</div>
 
</div>
 
<!-- Pod2Wiki=item_data -->
 
<!-- Pod2Wiki=item_data -->
===data===
+
===data (base64)===
  
 
Virtual field for storing the file's content.
 
Virtual field for storing the file's content.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=head_references_and_related_objects -->
 +
==REFERENCES AND RELATED OBJECTS==
 +
None.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=head_instances_variables -->
 +
==INSTANCES VARIABLES==
 +
See [[API:EPrints/DataObj#INSTANCE_VARIABLES|EPrints::DataObj]].
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 205: Line 215:
  
 
  $dataobj = EPrints::DataObj::File-&gt;new_from_filename( $session, $dataobj, $filename )
 
  $dataobj = EPrints::DataObj::File-&gt;new_from_filename( $session, $dataobj, $filename )
Convenience method to get an existing File object for $filename stored in $dataobj.
+
Convenience method to return an existing file object for <tt>$filename</tt>  stored in <tt>$dataobj</tt>.
  
Returns undef if no such record exists.
+
Returns <tt>undef</tt> if no such record exists.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 219: Line 229:
 
====create_from_data====
 
====create_from_data====
  
  $dataobj = EPrints::DataObj::File-&gt;create_from_data( $session, $data [, $dataset ] )
+
  $dataobj = EPrints::DataObj::File-&gt;create_from_data( $session, $data, $dataset )
Create a new File record using $data. If "_content" is defined in $data it will be read from and stored - for possible values see set_file().
+
Returns a new file record using <tt>$data</tt> and the file <tt>$dataset</tt>.
 +
 
 +
Private data elements:
  
 +
_content - content to pass to [[API:EPrints/DataObj/File#set_file|set_file]].
 +
_filepath - path to source file used for improved mime-type detection
 +
 
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<span style='display:none'>User Comments</span>
 
<span style='display:none'>User Comments</span>
Line 241: Line 256:
 
====get_system_field_info====
 
====get_system_field_info====
  
  $thing = EPrints::DataObj::File-&gt;get_system_field_info
+
  $fields = EPrints::DataObj::File-&gt;get_system_field_info
Core fields.
+
Returns an array describing the system metadata fields of the file  dataset.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 255: Line 270:
  
 
  $dataset = EPrints::DataObj::File-&gt;get_dataset_id
 
  $dataset = EPrints::DataObj::File-&gt;get_dataset_id
Returns the id of the [[API:EPrints/DataSet|EPrints::DataSet]] object to which this record belongs.
+
Returns the ID of the [[API:EPrints/DataSet|EPrints::DataSet]] object to which this record belongs.
 
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<span style='display:none'>User Comments</span>
 
<!-- Edit below this comment -->
 
 
 
 
 
<!-- Pod2Wiki= -->
 
</div>
 
<!-- Pod2Wiki=item_get_defaults -->
 
====get_defaults====
 
 
 
$defaults = EPrints::DataObj::File-&gt;get_defaults( $session, $data )
 
Return default values for this object based on the starting data.
 
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 290: Line 292:
  
 
  $new_file = $file-&gt;clone( $parent )
 
  $new_file = $file-&gt;clone( $parent )
Clone the $file object (including contained files) and return the new object.
+
Clone the file object (including contained files) and return the new object. Uses <tt>$parent</tt> to set the <tt>objectid</tt> of the cloned file data object, in case this needs to be different to the original.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 303: Line 305:
  
 
  $success = $file-&gt;remove
 
  $success = $file-&gt;remove
Delete the stored file.
+
Delete the file data object and the file it stores.
 +
 
 +
Returns boolean depending on the success of removing this file.
 +
 
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_update -->
 +
====update====
 +
 
 +
$file-&gt;update( $epdata )
 +
Updates the metadata for the file with <tt>$epdata</tt>.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 315: Line 332:
 
====get_local_copy====
 
====get_local_copy====
  
  $filename = $file-&gt;get_local_copy()
+
  $filename = $file-&gt;get_local_copy
Return the name of a local copy of the file (may be a {{API:PodLink|file=File/Temp|package_name=File::Temp|section=|text=File::Temp}} object).
+
Returns the name of a local copy of the file (may be a {{API:PodLink|file=File/Temp|package_name=File::Temp|section=|text=File::Temp}}  object).
 +
 
 +
Uses [[API:EPrints/Storage#get_local_copy|EPrints::Storage#get_local_copy]] which in turn calls the  configured local storage plugin.
 +
 
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_get_remote_copy -->
 +
====get_remote_copy====
 +
 
 +
$filename = $file-&gt;get_remote_copy
 +
Returns the name of a remote copy of the file (may be a {{API:PodLink|file=File/Temp|package_name=File::Temp|section=|text=File::Temp}} object).
  
Will retrieve and cache the remote object if necessary.
+
Uses [[API:EPrints/Storage#get_local_copy|EPrints::Storage#get_local_copy]] which in turn calls the configured remote storage plugin.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 331: Line 363:
  
 
  $success = $file-&gt;add_file( $filepath, $filename [, $preserve_path ] )
 
  $success = $file-&gt;add_file( $filepath, $filename [, $preserve_path ] )
Read and store the contents of $filepath at $filename.
+
Reads and stores the contents of <tt>$filepath</tt> at <tt>$filename</tt>.
 +
 
 +
If <tt>$preserve_path</tt> is not <tt>true</tt> will strip any leading path in  <tt>$filename</tt>.
  
If $preserve_path is untrue will strip any leading path in $filename.
+
Returns a boolean depending on the success of adding the file.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 346: Line 380:
  
 
  $bytes = $file-&gt;upload( $filehandle, $filename, $filesize [, $preserve_path ] )
 
  $bytes = $file-&gt;upload( $filehandle, $filename, $filesize [, $preserve_path ] )
Read and store the data from $filehandle at $filename at the next revision number.
+
Reads and stores the data from <tt>$filehandle</tt> at <tt>$filename</tt> at the next revision number.
  
If $preserve_path is untrue will strip any leading path in $filename.
+
If <tt>$preserve_path</tt> is not <tt>true</tt> will strip any leading path in <tt>$filename</tt>.
  
 
Returns the number of bytes read from $filehandle or undef on failure.
 
Returns the number of bytes read from $filehandle or undef on failure.
Line 362: Line 396:
 
====write_copy====
 
====write_copy====
  
  $success = $stored-&gt;write_copy( $filename )
+
  $success = $file-&gt;write_copy( $filename )
Write a copy of this file to $filename.
+
Write a copy of this file to <tt>$filename</tt>.
  
Returns true if the written file contains the same number of bytes as the stored file.
+
Returns <tt>true</tt> if the written file contains the same number of bytes as the stored file.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 377: Line 411:
 
====write_copy_fh====
 
====write_copy_fh====
  
  $success = $stored-&gt;write_copy_fh( $filehandle )
+
  $success = $file-&gt;write_copy_fh( $filehandle )
Write a copy of this file to $filehandle.
+
Write a copy of this file to <tt>$filehandle</tt>.
 +
 
 +
Returns boolean depending on success of writing copy of file to the file handle.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 390: Line 426:
 
====generate_md5====
 
====generate_md5====
  
  $md5 = $stored-&gt;generate_md5
+
  $md5 = $file-&gt;generate_md5
 
Calculates and returns the MD5 for this file.
 
Calculates and returns the MD5 for this file.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_update_md5 -->
 +
====update_md5====
 +
 +
$md5 = $file-&gt;update_md5
 +
Generates MD5 and sets <tt>hash</tt> and <tt>has_type</tt> (as <tt>MD5</tt>) for this  file data object.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 403: Line 452:
 
====generate_sha====
 
====generate_sha====
  
  $digest = $file-&gt;generate_sha( [ ALGORITHM ] )
+
  $digest = $file-&gt;generate_sha( [ $alg ] )
Generate a SHA for this file, see {{API:PodLink|file=Digest/SHA/PurePerl|package_name=Digest::SHA::PurePerl|section=|text=Digest::SHA::PurePerl}} for a list of supported algorithms. Defaults to "256" (SHA-256).
+
Generates a SHA for this file, see {{API:PodLink|file=Digest/SHA|package_name=Digest::SHA|section=|text=Digest::SHA}} for a list of supported algorithms. Defaults to <tt>256</tt> (SHA-256) if <tt>$alg</tt> is not set.
  
 
Returns the hex-encoded digest.
 
Returns the hex-encoded digest.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_update_sha -->
 +
====update_sha====
 +
 +
$md5 = $file-&gt;update_sha
 +
Generates a SHA for this file, see {{API:PodLink|file=Digest/SHA|package_name=Digest::SHA|section=|text=Digest::SHA}} for a list of supported algorithms. Defaults to <tt>256</tt> (SHA-256) if <tt>$alg</tt> is not set. Then sets the <tt>hash</tt> and c&lt;has_type&gt; for this file data object.
 +
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_to_sax -->
 +
====to_sax====
 +
 +
$file-&gt;to_sax( %opts )
 +
Generate SAX output for file data object and assign to <tt>Output</tt> of <tt>Handler</tt> specified in <tt>%opts</tt>.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 418: Line 493:
 
====add_plugin_copy====
 
====add_plugin_copy====
  
  $stored-&gt;add_plugin_copy( $plugin, $sourceid )
+
  $file-&gt;add_plugin_copy( $plugin, $sourceid )
Add a copy of this file stored using $plugin identified by $sourceid.
+
Add a copy of this file stored using <tt>$plugin</tt> identified by <tt>$sourceid</tt>.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 431: Line 506:
 
====remove_plugin_copy====
 
====remove_plugin_copy====
  
  $stored-&gt;remove_plugin_copy( $plugin )
+
  $file-&gt;remove_plugin_copy( $plugin )
Remove the copy of this file stored using $plugin.
+
Remove the copy of this file stored using <tt>$plugin</tt>.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 444: Line 519:
 
====get_file====
 
====get_file====
  
  $success = $stored-&gt;get_file( CALLBACK )
+
  $success = $file-&gt;get_file( $f, [ $offset, $n ] )
Get the contents of the stored file - see [[API:EPrints/Storage|EPrints::Storage]]::retrieve().
+
Get the contents of the stored file.
 +
 
 +
<tt>$offset</tt> is the position in bytes to start reading from, defaults to  0.
 +
 
 +
<tt>$n</tt> is the number of bytes to read, defaults to <tt>filesize</tt>.
 +
 
 +
<tt>$f</tt> is:
 +
 
 +
  sub {
 +
    my( $buffer ) = @_;
 +
    ...
 +
    return 1;
 +
  }
 +
 
 +
Returns boolean dependent on whether file was successfully retrieved.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 457: Line 546:
 
====set_file====
 
====set_file====
  
  $content_length = $stored-&gt;set_file( CONTENT, $content_length )
+
  $content_length = $file-&gt;set_file( $content, $clen )
Reads data from CONTENT and stores it. Sets the MD5 hash and filesize.
+
Write <tt>$clen</tt> bytes from <tt>$content</tt> to the file object. Updates  <tt>filesize</tt> and <tt>hash</tt>. You must then call [[API:EPrints/DataObj/File#commit|commit]]) to save these  changes.
  
If the write failed returns undef and sets the filesize to 0.
+
Returns an integer for the content length or <tt>undef</tt> on failure.
  
CONTENT may be one of:
+
<tt>$content</tt> may be one of:
  
  CODEREF - will be called until it returns empty string ("")
+
CODEREF - Will be called until it returns empty string ("").
  SCALARREF - a scalar reference will be used as-is (expects bytes)
+
SCALARREF - A scalar reference to a string of octets that will be written as-is.
  GLOB - will be treated as a file handle and read with sysread()
+
GLOB - Will be treated as a file handle and read with sysread().
 
    
 
    
This method does not check the actual number of bytes read is the same as $content_length.
+
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_set_file_chunk -->
 +
====set_file_chunk====
 +
 
 +
$content_length = $file-&gt;set_file_chunk( $content, $clen, $offset, $total )
 +
Write a chunk of data to the content, overwriting or appending to the  existing content. See [[API:EPrints/DataObj/File#set_file|set_file]] for <tt>$content</tt> and <tt>$clen</tt>.  <tt>filesize</tt> is updated if <tt>$offset + $content_length</tt> is greater than  the current <tt>filesize</tt>.
 +
 
 +
<tt>$offset</tt> is the starting point (in bytes) to write. <tt>$total</tt> is the  total size of the file, used to determine where to store the content.
 +
 
 +
Returns the number of bytes written or <tt>undef</tt> on failure.
 +
 
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_start_element -->
 +
====start_element====
 +
 
 +
$file-&gt;start_element( $data, $epdata, $state )
 +
Consumes a SAX event.  See &lt;EPrints::DataObj#start_element&gt; for more information.
 +
 
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_end_element -->
 +
====end_element====
 +
 
 +
$file-&gt;end_element( $data, $epdata, $state )
 +
Ends element from [[API:EPrints/DataObj/File#start_element|start_element]].
 +
 
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_characters -->
 +
====characters====
 +
 
 +
$file-&gt;characters( $data, $epdata, $state )
 +
Consumes characters within [[API:EPrints/DataObj/File#start_element|start_element]].
 +
 
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_render_filesize -->
 +
====render_filesize====
 +
 
 +
EPrints::DataObj::File-&gt;render_filesize( $repo, $field, $value )
 +
Returns an XHTML DOM fragment, which is either empty if <tt>$value</tt> is not set or a human-readable rendering of this file size.
 +
 
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_get_url -->
 +
====get_url====
 +
 
 +
$file-&gt;get_url
 +
Returns the URL from which this file can be downloaded. 
 +
 
 +
Calls [[API:EPrints/DataObj/Document#get_url|EPrints::DataObj::Document#get_url]] on the parent object for this file with the <tt>filename</tt> as a parameter.
 +
 
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 
 +
 
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=item_path -->
 +
====path====
 +
 
 +
$file-&gt;path
 +
Returns the filesystem path for this file.
  
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
Line 481: Line 665:
 
[[API:EPrints/DataObj|EPrints::DataObj]] and [[API:EPrints/DataSet|EPrints::DataSet]].
 
[[API:EPrints/DataObj|EPrints::DataObj]] and [[API:EPrints/DataSet|EPrints::DataSet]].
  
 +
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 +
<span style='display:none'>User Comments</span>
 +
<!-- Edit below this comment -->
 +
 +
 +
<!-- Pod2Wiki= -->
 +
</div>
 +
<!-- Pod2Wiki=head_copyright -->
 +
==COPYRIGHT==
 +
{{API:Copyright}}
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<div style='background-color: #e8e8f; margin: 0.5em 0em 1em 0em; border: solid 1px #cce;  padding: 0em 1em 0em 1em; font-size: 80%; '>
 
<span style='display:none'>User Comments</span>
 
<span style='display:none'>User Comments</span>

Latest revision as of 10:51, 10 January 2022

EPrints 3 Reference: Directory Structure - Metadata Fields - Repository Configuration - XML Config Files - XML Export Format - EPrints data structure - Core API - Data Objects


API: Core API

Latest Source Code (3.4, 3.3) | Revision Log | Before editing this page please read Pod2Wiki


NAME

EPrints::DataObj::File - a stored file

User Comments


DESCRIPTION

This class contains the technical metadata associated with a file. A file is a sequence of bytes stored in the storage layer (a "stored object"). Utility methods for storing and retrieving the stored object from the storage layer are made available.

Revision numbers on File work slightly differently to other objects. A File is only revised when it's stored object is changed and not when changes to it's metadata are made.

This class is a subclass of EPrints::DataObj::SubObject.

User Comments


CORE METADATA FIELDS

User Comments


fileid (counter)

Unique identifier for this file.

User Comments


datasetid (id)

Id of the dataset of the parent object.

User Comments


objectid (int)

Id of the parent object.

User Comments


filename (id)

Name of the file (may contain directory separators).

User Comments


mime_type (id)

MIME type of the file (e.g. "image/png").

User Comments


hash (id)

Check sum of the file.

User Comments


hash_type (id)

Name of check sum algorithm used (e.g. "MD5").

User Comments


filesize (bigint)

Size of the file in bytes.

User Comments


mtime (timestamp)

Last modification time of the file.

User Comments


url (url)

Virtual field for storing the file's URL.

User Comments


data (base64)

Virtual field for storing the file's content.

User Comments


REFERENCES AND RELATED OBJECTS

None.

User Comments


INSTANCES VARIABLES

See EPrints::DataObj.

User Comments


METHODS

User Comments


Constructor Methods

User Comments


new_from_filename

$dataobj = EPrints::DataObj::File->new_from_filename( $session, $dataobj, $filename )

Convenience method to return an existing file object for $filename stored in $dataobj.

Returns undef if no such record exists.

User Comments


create_from_data

$dataobj = EPrints::DataObj::File->create_from_data( $session, $data, $dataset )

Returns a new file record using $data and the file $dataset.

Private data elements:

_content - content to pass to set_file.
_filepath - path to source file used for improved mime-type detection
 

User Comments


Class Methods

User Comments


get_system_field_info

$fields = EPrints::DataObj::File->get_system_field_info

Returns an array describing the system metadata fields of the file dataset.

User Comments


get_dataset_id

$dataset = EPrints::DataObj::File->get_dataset_id

Returns the ID of the EPrints::DataSet object to which this record belongs.

User Comments


Object Methods

User Comments


clone

$new_file = $file->clone( $parent )

Clone the file object (including contained files) and return the new object. Uses $parent to set the objectid of the cloned file data object, in case this needs to be different to the original.

User Comments


remove

$success = $file->remove

Delete the file data object and the file it stores.

Returns boolean depending on the success of removing this file.

User Comments


update

$file->update( $epdata )

Updates the metadata for the file with $epdata.

User Comments


get_local_copy

$filename = $file->get_local_copy

Returns the name of a local copy of the file (may be a File::Temp object).

Uses EPrints::Storage#get_local_copy which in turn calls the configured local storage plugin.

User Comments


get_remote_copy

$filename = $file->get_remote_copy

Returns the name of a remote copy of the file (may be a File::Temp object).

Uses EPrints::Storage#get_local_copy which in turn calls the configured remote storage plugin.

User Comments


add_file

$success = $file->add_file( $filepath, $filename [, $preserve_path ] )

Reads and stores the contents of $filepath at $filename.

If $preserve_path is not true will strip any leading path in $filename.

Returns a boolean depending on the success of adding the file.

User Comments


upload

$bytes = $file->upload( $filehandle, $filename, $filesize [, $preserve_path ] )

Reads and stores the data from $filehandle at $filename at the next revision number.

If $preserve_path is not true will strip any leading path in $filename.

Returns the number of bytes read from $filehandle or undef on failure.

User Comments


write_copy

$success = $file->write_copy( $filename )

Write a copy of this file to $filename.

Returns true if the written file contains the same number of bytes as the stored file.

User Comments


write_copy_fh

$success = $file->write_copy_fh( $filehandle )

Write a copy of this file to $filehandle.

Returns boolean depending on success of writing copy of file to the file handle.

User Comments


generate_md5

$md5 = $file->generate_md5

Calculates and returns the MD5 for this file.

User Comments


update_md5

$md5 = $file->update_md5

Generates MD5 and sets hash and has_type (as MD5) for this file data object.

User Comments


generate_sha

$digest = $file->generate_sha( [ $alg ] )

Generates a SHA for this file, see Digest::SHA for a list of supported algorithms. Defaults to 256 (SHA-256) if $alg is not set.

Returns the hex-encoded digest.

User Comments


update_sha

$md5 = $file->update_sha

Generates a SHA for this file, see Digest::SHA for a list of supported algorithms. Defaults to 256 (SHA-256) if $alg is not set. Then sets the hash and c<has_type> for this file data object.

User Comments


to_sax

$file->to_sax( %opts )

Generate SAX output for file data object and assign to Output of Handler specified in %opts.

User Comments


add_plugin_copy

$file->add_plugin_copy( $plugin, $sourceid )

Add a copy of this file stored using $plugin identified by $sourceid.

User Comments


remove_plugin_copy

$file->remove_plugin_copy( $plugin )

Remove the copy of this file stored using $plugin.

User Comments


get_file

$success = $file->get_file( $f, [ $offset, $n ] )

Get the contents of the stored file.

$offset is the position in bytes to start reading from, defaults to 0.

$n is the number of bytes to read, defaults to filesize.

$f is:

 sub {
   my( $buffer ) = @_;
   ...
   return 1;
 }
 

Returns boolean dependent on whether file was successfully retrieved.

User Comments


set_file

$content_length = $file->set_file( $content, $clen )

Write $clen bytes from $content to the file object. Updates filesize and hash. You must then call commit) to save these changes.

Returns an integer for the content length or undef on failure.

$content may be one of:

CODEREF - Will be called until it returns empty string ("").
SCALARREF - A scalar reference to a string of octets that will be written as-is.
GLOB - Will be treated as a file handle and read with sysread().
 

User Comments


set_file_chunk

$content_length = $file->set_file_chunk( $content, $clen, $offset, $total )

Write a chunk of data to the content, overwriting or appending to the existing content. See set_file for $content and $clen. filesize is updated if $offset + $content_length is greater than the current filesize.

$offset is the starting point (in bytes) to write. $total is the total size of the file, used to determine where to store the content.

Returns the number of bytes written or undef on failure.

User Comments


start_element

$file->start_element( $data, $epdata, $state )

Consumes a SAX event. See <EPrints::DataObj#start_element> for more information.

User Comments


end_element

$file->end_element( $data, $epdata, $state )

Ends element from start_element.

User Comments


characters

$file->characters( $data, $epdata, $state )

Consumes characters within start_element.

User Comments


render_filesize

EPrints::DataObj::File->render_filesize( $repo, $field, $value )

Returns an XHTML DOM fragment, which is either empty if $value is not set or a human-readable rendering of this file size.

User Comments


get_url

$file->get_url

Returns the URL from which this file can be downloaded.

Calls EPrints::DataObj::Document#get_url on the parent object for this file with the filename as a parameter.

User Comments


path

$file->path

Returns the filesystem path for this file.

User Comments


SEE ALSO

EPrints::DataObj and EPrints::DataSet.

User Comments


COPYRIGHT

© Copyright 2023 University of Southampton.

EPrints 3.4 is supplied by EPrints Services.

http://www.eprints.org/eprints-3.4/

LICENSE

This file is part of EPrints 3.4 http://www.eprints.org/.

EPrints 3.4 and this file are released under the terms of the GNU Lesser General Public License version 3 as published by the Free Software Foundation unless otherwise stated.

EPrints 3.4 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with EPrints 3.4. If not, see http://www.gnu.org/licenses/.

User Comments