Forums / Developer / Extract an eZBinaryFile from Cluster

Extract an eZBinaryFile from Cluster

Author Message

Fabien Scantamburlo

Friday 02 April 2010 7:33:31 am

Hi,

I'm trying to get the content of an eZBinaryFile (previously uploaded through the admin interface) in order to use it.

I found the following code:

$fileHandler = eZBinaryFileHandler::instance();
$fileHandler->handleDownload($contentObject, $contentObjectAttribute, eZBinaryFileHandler::TYPE_FILE);

This code works fine to download the file (using the eZFilePassthroughHandler) but i can't get the file resource.

Is there any other way to extract the file from the cluster file system ?

Thanks in advance,

Fabien.

Bertrand Dunogier

Saturday 03 April 2010 2:39:27 am

Well, it depends on what you want to extract it for. If you need to read it from an extension's PHP code, then you need to fetch a temporary copy of the file. You can do this using fetch or fileFetch:

// get the eZBinaryFile's path
$filePath = $contentObjectAttribute->objectAttributeContent()->filePath();
$file = eZClusterFileHandler::instance( $filePath );

// fetch the file locally using its original name
$file->fetch();

// process the file
do_stuff_with_file( $filePath );

// delete the local copy
$file->deleteLocal();

You are then able to access the file using $filePath.
Once you're done with it, you can delete it by calling deleteLocal() on $file in order to remove the local copy.

If you only need the file's content, as binary data, you can use fetchContents() instead in order to get the contents without creating a local copy:

$filePath = $contentObjectAttribute->objectAttributeContent()->filePath();
$file = eZClusterFileHandler::instance( $filePath );

// get the file's binary content
$contents = $file->fetchContents();

do_stuff_with_file_contents( $contents );

If you are worried about concurrent operations, you can also fetch the file with a unique name so that no other process risks interacting with it:

$file = eZClusterFileHandler::instance(
    $contentObjectAttribute->objectAttributeContent()->filePath()
);

// create a local copy, and get the copy's path
$temporaryPath = $file->fetchUnique();

// process the local file
do_stuff_with_file( $temporaryPath ); 

// remove the temporary file
unlink( $temporaryPath  );

Does this help ?

Bertrand Dunogier
eZ Systems Engineering, Lyon
http://twitter.com/bdunogier
http://gplus.to/BertrandDunogier

Fabien Scantamburlo

Tuesday 06 April 2010 7:42:29 am

Hi Bertrand,

It seems to work fine ! (I only test it on the FileSystem. I'll be able to test it on the DB system in a few days. I think eZClusterFileHandler's going to be my best friend !).

Thank you very much.

Best regards,

Fabien.

eZ debug

Timing: Jan 29 2025 13:33:09
Script start
Timing: Jan 29 2025 13:33:09
Module start 'content'
Timing: Jan 29 2025 13:33:09
Module end 'content'
Timing: Jan 29 2025 13:33:09
Script end

Main resources:

Total runtime0.1274 sec
Peak memory usage2,048.0000 KB
Database Queries141

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0124 587.9531180.8281
Module start 'content' 0.01240.0047 768.781398.0078
Module end 'content' 0.01710.1102 866.7891526.5469
Script end 0.1273  1,393.3359 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.00342.6752200.0002
Check MTime0.00141.0619200.0001
Mysql Total
Database connection0.00070.579110.0007
Mysqli_queries0.083565.56131410.0006
Looping result0.00090.74321390.0000
Template Total0.109886.210.1098
Template load0.00090.678910.0009
Template processing0.109085.524010.1090
Override
Cache load0.00060.476410.0006
Sytem overhead
Fetch class attribute can translate value0.00060.494510.0006
XML
Image XML parsing0.00030.204110.0003
General
dbfile0.00372.8692200.0002
String conversion0.00000.005430.0000
Note: percentages do not add up to 100% because some accumulators overlap

CSS/JS files loaded with "ezjscPacker" during request:

CacheTypePacklevelSourceFiles
CSS0extension/community/design/community/stylesheets/ext/jquery.autocomplete.css
extension/community_design/design/suncana/stylesheets/scrollbars.css
extension/community_design/design/suncana/stylesheets/tabs.css
extension/community_design/design/suncana/stylesheets/roadmap.css
extension/community_design/design/suncana/stylesheets/content.css
extension/community_design/design/suncana/stylesheets/star-rating.css
extension/community_design/design/suncana/stylesheets/syntax_and_custom_tags.css
extension/community_design/design/suncana/stylesheets/buttons.css
extension/community_design/design/suncana/stylesheets/tweetbox.css
extension/community_design/design/suncana/stylesheets/jquery.fancybox-1.3.4.css
extension/bcsmoothgallery/design/standard/stylesheets/magnific-popup.css
extension/sevenx/design/simple/stylesheets/star_rating.css
extension/sevenx/design/simple/stylesheets/libs/fontawesome/css/all.min.css
extension/sevenx/design/simple/stylesheets/main.v02.css
extension/sevenx/design/simple/stylesheets/main.v02.res.css
JS0extension/ezjscore/design/standard/lib/yui/3.17.2/build/yui/yui-min.js
extension/ezjscore/design/standard/javascript/jquery-3.7.0.min.js
extension/community_design/design/suncana/javascript/jquery.ui.core.min.js
extension/community_design/design/suncana/javascript/jquery.ui.widget.min.js
extension/community_design/design/suncana/javascript/jquery.easing.1.3.js
extension/community_design/design/suncana/javascript/jquery.ui.tabs.js
extension/community_design/design/suncana/javascript/jquery.hoverIntent.min.js
extension/community_design/design/suncana/javascript/jquery.popmenu.js
extension/community_design/design/suncana/javascript/jScrollPane.js
extension/community_design/design/suncana/javascript/jquery.mousewheel.js
extension/community_design/design/suncana/javascript/jquery.cycle.all.js
extension/sevenx/design/simple/javascript/jquery.scrollTo.js
extension/community_design/design/suncana/javascript/jquery.cookie.js
extension/community_design/design/suncana/javascript/ezstarrating_jquery.js
extension/community_design/design/suncana/javascript/jquery.initboxes.js
extension/community_design/design/suncana/javascript/app.js
extension/community_design/design/suncana/javascript/twitterwidget.js
extension/community_design/design/suncana/javascript/community.js
extension/community_design/design/suncana/javascript/roadmap.js
extension/community_design/design/suncana/javascript/ez.js
extension/community_design/design/suncana/javascript/ezshareevents.js
extension/sevenx/design/simple/javascript/main.js

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1pagelayout.tpl<No override>extension/sevenx/design/simple/templates/pagelayout.tplEdit templateOverride template
 Number of times templates used: 1
 Number of unique templates used: 1

Time used to render debug report: 0.0002 secs