Maison  >  Article  >  développement back-end  >  Comment utiliser le framework CI pour optimiser les téléchargements de fichiers et télécharger plusieurs fichiers

Comment utiliser le framework CI pour optimiser les téléchargements de fichiers et télécharger plusieurs fichiers

不言
不言original
2018-06-14 14:30:192107parcourir

Cet article présente principalement la méthode du framework CI pour optimiser le téléchargement de fichiers et le téléchargement multi-fichiers. Il analyse en détail les idées de mise en œuvre et les étapes de fonctionnement spécifiques du framework CI pour optimiser le téléchargement de fichiers et le téléchargement multi-fichiers sous forme d'exemples. . Les amis dans le besoin peuvent s'y référer. Suivant

Cet article analyse la méthode du framework CI pour optimiser les téléchargements de fichiers et les téléchargements multiples de fichiers à travers des exemples. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

J'ai récemment étudié le framework Codeigniter lors de l'écriture du téléchargement de fichiers dans le projet de développement, j'ai constaté que la plupart des programmeurs utilisent la classe de téléchargement de fichiers de. le framework Codeigniter pour écrire la méthode de téléchargement. Cette redondance de code existe (ou le taux de réutilisation du code est faible et consomme des ressources.) J'ai donc développé une méthode de téléchargement légèrement optimisée. Et lors de la recherche d'informations, j'ai trouvé qu'il est difficile de télécharger plusieurs fichiers en même temps avec le framework Codeigniter, donc tout en optimisant la méthode, j'ai également étudié comment utiliser le framework Codeigniter pour télécharger plusieurs fichiers en même temps. Permettez-moi de le partager avec vous. Les étudiants intéressés peuvent y prêter attention. Vous êtes invités à corriger toute erreur.

1. Optimiser la méthode de téléchargement de fichiers

Les méthodes couramment utilisées dans le manuel Codeigniter ne seront pas décrites à nouveau ici. Parlons directement de la façon d'optimiser la méthode. afin d'atteindre l'objectif de réduire la redondance du code et d'améliorer le taux de réutilisation du code.

a) Créez d'abord un nouveau fichier de configuration "upload.php" dans "application/config"

Créez un nouveau fichier de configuration "upload.php" dans "application/config" et écrivez le informations téléchargées dedans Paramètres de configuration.

<?php
  defined(&#39;BASEPATH&#39;) OR exit(&#39;No direct script access allowed&#39;);
  //上传的参数配置
  $config[&#39;upload_path&#39;] = &#39;./public/uploads/&#39;;
  $config[&#39;allowed_types&#39;] = &#39;gif|png|jpg&#39;;
  $config[&#39;max_size&#39;] = 100;
  $config[&#39;max_width&#39;] = &#39;1024&#39;;
  $config[&#39;max_height&#39;] = &#39;768&#39;;

Remarque : Le dossier chemin représenté par le paramètre upload_path a déjà été créé dans le projet !

b) Chargez la classe de téléchargement de fichiers dans le constructeur du contrôleur

<?php
defined(&#39;BASEPATH&#39;) OR exit(&#39;No direct script access allowed&#39;);
/**
 * 控制器
 */
class Brand extends Admin_Controller
{
  public function __construct()
  {
    parent::__construct();
    $this->load->model(&#39;brand_model&#39;);
    $this->load->library(&#39;form_validation&#39;);
    //激活分析器以调试程序
    $this->output->enable_profiler(TRUE);
    //配置中上传的相关参数会自动加载
    $this->load->library(&#39;upload&#39;);
  }
}

Remarque : "Les informations de configuration de téléchargement dans le Le fichier upload.php sera automatiquement chargé ici.

c) Écrivez la méthode de téléchargement et exécutez la méthode do_upload() pour télécharger le fichier

public function insert()
{
  //设置验证规则
  $this->form_validation->set_rules(&#39;brand_name&#39;,&#39;名称&#39;,&#39;required&#39;);
  if($this->form_validation->run() == false){
    //未通过验证
    $data[&#39;message&#39;] = validation_errors();
    $data[&#39;wait&#39;] = 3;
    $data[&#39;url&#39;] = site_url(&#39;admin/brand/add&#39;);
    $this->load->view(&#39;message.html&#39;,$data);
  }else{
    //通过验证,处理图片上传
    if ($this->upload->do_upload(&#39;logo&#39;)) { //logo为前端file控件名
      //上传成功,获取文件名
      $fileInfo = $this->upload->data();
      $data[&#39;logo&#39;] = $fileInfo[&#39;file_name&#39;];
      //获取表单提交数据
      $data[&#39;brand_name&#39;] = $this->input->post(&#39;brand_name&#39;);
      $data[&#39;url&#39;] = $this->input->post(&#39;url&#39;);
      $data[&#39;brand_desc&#39;] = $this->input->post(&#39;brand_desc&#39;);
      $data[&#39;sort_order&#39;] = $this->input->post(&#39;sort_order&#39;);
      $data[&#39;is_show&#39;] = $this->input->post(&#39;is_show&#39;);
      //调用模型完成添加动作
      if($this->brand_model->add_brand($data)){
        $data[&#39;message&#39;] = "添加成功";
        $data[&#39;wait&#39;] = 3;
        $data[&#39;url&#39;] = site_url(&#39;admin/brand/index&#39;);
        $this->load->view(&#39;message.html&#39;,$data);
      }else{
        $data[&#39;message&#39;] = "添加失败";
        $data[&#39;wait&#39;] = 3;
        $data[&#39;url&#39;] = site_url(&#39;admin/brand/add&#39;);
        $this->load->view(&#39;message.html&#39;,$data);
      }
    }else{
      //上传失败
      $data[&#39;message&#39;] = $this->upload->display_errors();
      $data[&#39;wait&#39;] = 3;
      $data[&#39;url&#39;] = site_url(&#39;admin/brand/add&#39;);
      $this->load->view(&#39;message.html&#39;,$data);
    }
  }
}

Remarque : une partie de ce qui précède le code provient de mon projet. Vous pouvez ignorer le code et vous concentrer directement sur le code de téléchargement de la clé. Lorsque vous devez télécharger différents fichiers, vous pouvez également configurer le téléchargement de fichiers dans la méthode, en utilisant la méthode $this->upload->initialize().

2. Deux méthodes pour télécharger plusieurs fichiers en même temps

① Méthode 1 : Traitement en boucle de plusieurs fichiers téléchargés

/**
 * Codeigniter框架实现多文件上传
 * @author Zhihua_W
 * 方法一:对上传的文件进行循环处理
 */
public function multiple_uploads1()
{
  //载入所需文件上传类库
  $this->load->library(&#39;upload&#39;);
  //配置上传参数
  $upload_config = array(
    &#39;upload_path&#39; => &#39;./public/uploads/&#39;,
    &#39;allowed_types&#39; => &#39;jpg|png|gif&#39;,
    &#39;max_size&#39; => &#39;500&#39;,
    &#39;max_width&#39; => &#39;1024&#39;,
    &#39;max_height&#39; => &#39;768&#39;,
  );
  $this->upload->initialize($upload_config);
  //循环处理上传文件
  foreach ($_FILES as $key => $value) {
    if (!empty($key[&#39;name&#39;])) {
      if ($this->upload->do_upload($key)) {
        //上传成功
        print_r($this->upload->data());
      } else {
        //上传失败
        echo $this->upload->display_errors();
      }
    }
  }
}

② Méthode 2 : Téléchargez plusieurs fichiers directement, puis traitez les données téléchargées

/**
 * Codeigniter框架实现多文件上传
 * @author Zhihua_W
 * 方法二:直接一下将多个文件全部上传然后在对上传过的数据进行处理
 */
public function multiple_uploads2()
{
  $config[&#39;upload_path&#39;] = &#39;./public/uploads/&#39;;
  //这里的public是相对于index.php的,也就是入口文件,这个千万不能弄错!
  //否则就会报错:"The upload path does not appear to be valid.";
  $config[&#39;allowed_types&#39;] = &#39;gif|jpg|png&#39;;
  //我试着去上传其它类型的文件,这里一定要注意顺序!
  //否则报错:"A problem was encountered while attempting to move the uploaded file to the final destination."
  //这个错误一般是上传文件的文件名不能是中文名,这个很郁闷!还未解决,大家可以用其它方法,重新改一下文件名就可以解决了!
  //$config[&#39;allowed_types&#39;] = &#39;zip|gz|png|gif|jpg&#39;;(正确)
  //$config[&#39;allowed_types&#39;] = &#39;png|gif|jpg|zip|gz&#39;;(错误)
  $config[&#39;max_size&#39;] = &#39;1024&#39;;
  $config[&#39;max_width&#39;] = &#39;1024&#39;;
  $config[&#39;max_height&#39;] = &#39;768&#39;;
  $config[&#39;file_name&#39;] = time(); //文件名不使用原始名
  $this->load->library(&#39;upload&#39;, $config);
  if (!$this->upload->do_upload()) {
    echo $this->upload->display_errors();
  } else {
    $data[&#39;upload_data&#39;] = $this->upload->data(); //上传文件的一些信息
    $img = $data[&#39;upload_data&#39;][&#39;file_name&#39;]; //取得文件名
    echo $img . "<br>";
    foreach ($data[&#39;upload_data&#39;] as $item => $value) {
      echo $item . ":" . $value . "<br>";
    }
  }
}

Lequel des deux les méthodes sont-elles plus pratiques ? Lequel est le plus efficace ? Vous pouvez l'essayer vous-même !

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Analyse des fichiers et de l'utilisation de la bibliothèque de codes de vérification du framework CodeIgniter

À propos de l'image d'encapsulation du framework CI couramment utilisée méthode de traitement

Comment utiliser le framework CodeIgniter pour implémenter la méthode de téléchargement d'images

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn