2

Drupal サイトの一括アップロード機能を作成中です。フラッシュを使用すると、ファイルを処理する特定の URL にファイルをアップロードできます。私がやりたいことは、ファイルをアップロードするだけでなく、CCK でセットアップされたファイルフィールドに保存されたファイルで特定のタイプのノードを作成することです。これらはオーディオ ファイルであるため、filefield でファイルを処理することが重要です。追加のメタ データを getid3 モジュールで提供できます。

API ドキュメントを見つけることができなかったので、いくつかのコードを調べましたが、これをどのように処理すればよいかはまったく明確ではありません。理想的には、ファイルを関数に渡し、ノードを保存するときに返されたデータを使用するだけでよいのですが、その関数を見つけることができませんでした。

誰かがこれを経験したことがあるなら、この問題に取り組む方法についてのいくつかの指針を高く評価します.

4

3 に答える 3

8

私は数週間前に似たようなことをしなければならず、最終的にRemote File モジュールのいくつかの機能、特に関数を適応させましたremote_file_cck_attach_file()。filefield モジュールの関数を使用しfield_file_save_file()ます。これは、探している関数である可能性があります。

私の場合、ファイルはいくつかのリモートの場所から取得され、を使用して一時的に保存されますfile_save_data()。それらをCCKファイルフィールドに添付することhook_nodeapi()は、次を使用して事前保存時に行われます。

public static function attachAsCCKField(&$node, $filepath, $fieldname, $index=0) {
  // Grab the filefield definition
  $field = content_fields($fieldname, $node->type);
  $validators = array_merge(filefield_widget_upload_validators($field), imagefield_widget_upload_validators($field));
  $fieldFileDirectory = filefield_widget_file_path($field);
  // This path does not necessarily exist already, so make sure it is available
  self::verifyPath($fieldFileDirectory);
  $file = field_file_save_file($filepath, $validators, $fieldFileDirectory);
  // Is the CCK field array already available in the node object?
  if (!is_array($node->$fieldname)) {
    // No, add a stub
    $node->$fieldname=array();
  }
  $node->{$fieldname}[$index] = $file;
}

$filepathは添付するファイルへのパス、$fieldnameはノード内で使用するファイル フィールド インスタンスの内部名、$index複数のフィールド エントリの場合は添付ファイルの 0 ベースのインデックスになります。

関数はユーティリティ クラス内で終了したため、verifyPath() 呼び出しのクラス構文です。この呼び出しは、ターゲット ディレクトリが利用可能であることを確認するだけです。

public static function verifyPath($path) {
  if (!file_check_directory($path, FILE_CREATE_DIRECTORY)) {
    throw new RuntimeException('The path "' . $path . '" is not valid (not creatable, not writeable?).');
  }
}

それは私のためにそれをしました - 他のすべてはノードの保存で自動的に起こります。

getid3 モジュールはまだ使用していないので、この方法でうまくいくかどうかはわかりません。また、追加の情報/属性をファイル フィールドに追加する必要はなかったので、field_file_save_file(). とにかく、これがお役に立てば幸いです。

于 2009-10-29T19:30:28.287 に答える
1

フラッシュ アップロードの統合について確認する必要がある場合は、 Image FUploadを参照してください。

Drupal を介してファイルを処理しながら別のサーバーにファイルをプッシュするというのは、CDN スペースのように聞こえますが、CDNまたはCDN2プロジェクトの動作を見てください。

明確な解決策を見つけたら、戻ってきて投稿してください。

于 2009-10-29T16:00:59.810 に答える
1

イメージフィールドで何かを行ったことがありますが、構造が正しくなければ機能しないと思います。多くの試行錯誤が必要でした。これは、イメージフィールドに入力したものです。

$image['data'] =array(
            'title' => $media_reference_attributes->getNamedItem("source")->value,
            'description' => $description,
            'alt' => "",);
$image['width'] = $width;
$image['height'] = $height;
$image['mimetype'] = $mime_type
$image['uid'] = 1;
$image['status'] = 1;
$image['fid'] = $fid;
$image['filesize'] = $file->filesize;
$image['nid'] = $id;
$image['filename'] = $url;
$image['timestamp'] = $file->timestamp;
$image['filepath'] = $file_path;

これが役立つことを願っています。

于 2009-10-29T12:56:20.353 に答える