web-dev-qa-db-ja.com

ajaxを使用したファイルのアップロード

AJAX経由でアップロードするために、タイプファイルでフォーム要素を設定する方法の例はありますか?ノード型記事のフィールド画像と同じにしたい。

tHX

5
kkatusic

多分これは(カスタムモジュールで)役立つでしょう:

function testmodule_forma($form, & $form_state) {
    $form['im-container'] = array(
        '#prefix' => '<div id="im-area">',
        '#suffix' => '</div>',
    );

    $form['image_file'] = array(
        '#type' => 'file',
    );

    $form['upload'] = array(
        '#type' => 'submit',
        '#value' => 'upload',
        '#submit' => array('upload_image'),
        '#ajax' => array(
            'callback' => 'upload_image',
            'wrapper' => 'im-area',
            'method' => 'replace',
            'effect' => 'fade',
        ),
    );
    return $form;
}

function upload_image($form, $form_state) {

    $file = file_save_upload('image_file', array('file_validate_extensions' => array('png gif jpg jpeg')), "public://", FILE_EXISTS_REPLACE);
    if ($file) {
        $file->status = FILE_STATUS_PERMANENT;
        file_save($file);
        $form['im-container'] = array(
            '#title' => t('Preview:'),
            '#prefix' => '<div id="im-area">',
            '#markup' => '<img src="sites/default/files/'.$file - > filename.
            '" height="250" width="250" />',
            '#suffix' => '</div>',
        );
    } else {
        drupal_set_message('No file uploaded.');
    }

    return $form['im-container'];
}
10
NemanjaLazic

D7を使用している場合、なぜこのタスクを達成するために厄介なコードを作成しているのですか?

D7フォームAPIには、ajaxを使用してファイルをアップロードするtype = managed_fileがあります。

この例を試してください:

$form['image'] = array(
            '#type' => 'managed_file',
            '#title' => t('Upload Image'),
            '#default_value' => '',
            '#required' => TRUE,
            '#description' => t("Upload Image description"),
        );
4
Ravindra Singh