it-swarm.com.de

Erstellen eines Dateiobjekts aus einer bereits öffentlichen Datei: // (Drupal 7)

Ich schreibe gerade ein Modul, das eine .Zip-Datei nach dem Hochladen entpackt. Sobald diese Datei entpackt ist, möchte ich sie durchsuchen und bestimmte Dateitypen finden und Inhaltstypen erstellen, die Datei- oder Bildfelder enthalten, die auf diese Dateien verweisen. Um jedoch die Bild- und Dateifelder zu füllen, muss ich ein Dateiobjekt erstellen. Wie kann ich dies tun, ohne die bereits hochgeladenen und entpackten Dateien duplizieren zu müssen?

5
Mike2012

Ich denke, der einfachste Weg wäre, ein Dateiobjekt manuell zu erstellen, es mit den Dateidetails zu füllen und es mit file_save() zu speichern:

global $user;
$uri = 'public://path/to/file.txt';
$filename = 'file.txt';

$file = new stdClass;
$file->uid = $user->uid;
$file->filename = $filename;
$file->uri = $uri;
$file->filemime = 'text/plain';
$file->filesize = filesize($uri);
$file->status = 1;

file_save($file);

Nachdem Sie dies getan haben, möchten Sie wahrscheinlich auch die Funktion file_usage_add() verwenden, um ein unverfallbares Interesse an der Datei zu deklarieren, damit sie von keinem anderen gelöscht wird Systemprozess:

$type = 'some_type'; // A string used by your module to identify this type of file entry
$id = 'some_id'; // An identifier used by your module to identify this particular file    

file_usage_add($file, 'MYMODULE', $type, $id);
15
Clive