web-dev-qa-db-fra.com

"Le chemin de téléchargement ne semble pas être valide". Le téléchargement de fichier Codeigniter ne fonctionne pas

Cela fait longtemps que je suis bloqué et, même après avoir lu plusieurs articles, je n'ai pas trouvé de solution.

Je suis en train de créer une interface pour un quiz, et dans l'interface d'administration, j'ai besoin de télécharger des images dans un dossier et de télécharger le nom de l'image dans la base de données. Je peux gérer d'autres choses, mais le téléchargement d'images me dérange énormément depuis longtemps.

S'il vous plaît jeter un oeil à mon code ci-dessous.

La forme

<?php echo form_open_multipart('admin/update_question'); ?>
<?php echo form_hidden('questionid', $question->level); ?>
<?php echo form_label('Comment', 'comment'); ?>
<div class="input">
<?php
    $arr_comment = array(
        'name'  => 'comment',
        'id'    => 'comment',
        'value' => $question->comment
        );
        echo form_textarea($arr_comment);
?>
</div>
<br/>
<?php echo form_label('Answer', 'answer'); ?>
<div class="input">
<?php
    $arr_answer = array(
            'name'  => 'answer',
            'id'    => 'answer',
            'size'  => '10000',
            'value' => $question->answer
    );
    echo form_input($arr_answer);
?>
</div>
<br/>
<?php echo form_label('Image', 'userfile'); ?>
<div class="input">
<?php
    $arr_image = array(
        'name'  => 'userfile',
        'id'  => 'userfile',
        'value' => ''
    );
    echo form_upload($arr_image);
?>
</div>
<br/>
<?php
$arr_button = array(
    'name'  => 'submit',
    'value' => 'Update Question',
    'class' => 'btn primary large'
    );
?>
<div class="input">
<?php echo form_submit($arr_button); ?>
</div>
<br/>
<?php
echo form_close();
if ($error != '')
    echo '<div class="alert-message error">'. $error.' </div>';
echo validation_errors();
?>

J'ai essayé d'exécuter un js qui renvoie le nom du fichier dans la boîte d'envoi et le renvoie.

Le controlle

public function update_question() {
        $comment = $this->input->post('comment');
        $answer = $this->input->post('answer');

        echo var_dump(is_dir(base_url().'uploads/'));

        /*
         * Uploading image
         */
        $config['upload_path'] = base_url().'/uploads/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_width'] = 0;
        $config['max_height'] = 0;
        $config['max_size'] = 0;
        $config['encrypt_name'] = TRUE;

        $this->load->library('upload', $config);
        if ( ! $this->upload->do_upload())
        {
                $error = array('error' => $this->upload->display_errors());
                print_r($error);
        }
        else
        {
                $arr_image = array('upload_data' => $this->upload->data());
                print_r($arr_image);
        }

        $questionid = $this->input->post('questionid');
        $question_data = array(
            'comment'   => $comment,
            'answer'    => $answer
        );
        $this->load->model('adminmodel', 'admin');
        $question_data = $this->admin->update_question_data($questionid, $question_data);
        //redirect('admin/questions', 'location');
}

Pour mon chemin de téléchargement, j'ai essayé un nombre ou des combinaisons et le seul qui a renvoyé une valeur TRUE était var_dump(is_dir('/wamp/www/quark_edorado/uploads'));, mais cela a également renvoyé la même erreur.

Je ne sais pas où je vais mal.

Mettre à jour

Ma structure de répertoire est

/application/
/public/
    css/
    fonts/
    images/
    js/
/system/
/uploads/

J'utilise une machine Windows et utilise WAMP. Cela fait-il une différence?

18
Aniket

Je chargeais automatiquement la bibliothèque et lorsque j'essayais d'initialiser la configuration avec $this->load->library('upload', $config);, cela ne se faisait pas.

Au lieu de cela, je mets mes fichiers de configuration dans config/upload.php

L’autre méthode pour le faire aurait été $this->upload->initialize($config);

47
Aniket

Ok, placez votre dossier de téléchargement sur l'emplacement d'origine tel que vous l'avez montré dans votre question et essayez ceci (donnez le chemin relatif à votre base_url)

$config['upload_path'] = 'uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_width'] = 0;
$config['max_height'] = 0;
$config['max_size'] = 0;
$config['encrypt_name'] = TRUE;

$this->load->library('upload', $config);
if ( ! $this->upload->do_upload()) {
    $error = array('error' => $this->upload->display_errors());
    print_r($error);
} else {
    $arr_image = array('upload_data' => $this->upload->data());
    print_r($arr_image);
}
9
Dau
if ( ! $this->upload->do_upload())


try adding the file field name


if ( ! $this->upload->do_upload('userfile'))
0
Philip