/ / So speichern Sie ein Dateiobjekt in einem Feld, nachdem Sie „file_scan_directory“ verwendet haben - drupal-7

So speichern Sie ein Dateiobjekt in einem Feld, nachdem Sie „file_scan_directory“ verwendet haben - drupal-7

Ich versuche, file_scan_directory zum Scannen zu verwendenDateien und erhalten einen lokalen Pfad, und ich möchte, dass sie zu einem Objekt werden und in db gespeichert werden. file_save nimmt ein Dateiobjekt als Parameter, und wie kann ich diese Prozedur zum Erfolg führen?

Ich habe versucht, file_save_upload, API-Dokument erwähntder Parameter "$ source --- Eine Zeichenfolge, die den Dateipfad oder die URI der hochgeladenen Datei angibt, die gespeichert werden soll", scheint jedoch den Pfad nicht zu lesen und immer null zurückzugeben.

Ich versuche auch, ein Dateiobjekt für das Ausführen von file_save benutzerdefiniert zu erstellen. Es funktioniert zwar, aber ich denke nicht, dass es in der richtigen Drupal-Art ist.

file_scan_directory-> ???? -> file_save -> field_attach_update (* ein Feld mit neuem fid aktualisieren, sobald die Datei gespeichert ist)

Bitte helfen Sie dafür, vielen Dank!

Antworten:

1 für die Antwort № 1

Dieses Snippet wird einige JPG-Dateien scannen, in db speichern und die Dateien an ein Feld anhängen.

function test_form(){
$node = node_load("61");
unset($node->field_image[$node->language]);

$files = file_scan_directory("public://testimport", "/^.*.(jpg|JPG)$/");

//dpm($files);

//http://drupal.org/node/889058
foreach($files as $fileobj){

$query = new EntityFieldQuery;
$result = $query
->entityCondition("entity_type", "file")
->propertyCondition("uri", $fileobj->uri)
//$query->propertyCondition("uri", "public://%", "LIKE");
->execute();

if(isset($result["file"])){
dpm($result["file"]);
$fid = reset($result["file"])->fid;
$fileobj = file_load($fid);
}else{
$fileobj->filemine = file_get_mimetype($fileobj->uri);
$fileobj = file_save($fileobj);
}

$node->field_image[$node->language][] = array(
"fid" => $fileobj->fid,
//"alt" => $node->title,
//"title" => $node->title,
"uid" => "1",
"filename" => $fileobj->filename,
"uri" => $fileobj->uri,
"filemime" => $fileobj->filemime,
"filesize"=> $fileobj->filesize,
"status" => "1",
);

}

if($node = node_submit($node)) { // Prepare node for saving
node_save($node);
echo "Node with nid " . $node->nid . " updated!n";
}
}