Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie das CI-Framework, um Datei-Uploads zu optimieren und mehrere Dateien hochzuladen

So verwenden Sie das CI-Framework, um Datei-Uploads zu optimieren und mehrere Dateien hochzuladen

不言
不言Original
2018-06-14 14:30:192051Durchsuche

In diesem Artikel wird hauptsächlich die Methode des CI-Frameworks zur Optimierung des Datei-Uploads und des Multi-Datei-Uploads vorgestellt. Er analysiert die Implementierungsideen und spezifischen Betriebsschritte des CI-Frameworks zur Optimierung des Datei-Uploads und des Multi-Datei-Uploads im Detail . Freunde in Not können sich darauf beziehen.

Dieser Artikel analysiert die Methode des CI-Frameworks zur Optimierung von Datei-Uploads und mehreren Datei-Uploads. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Ich habe kürzlich das Codeigniter-Framework studiert. Beim Schreiben des Datei-Uploads im Entwicklungsprojekt habe ich festgestellt, dass die meisten Programmierer die Datei-Upload-Klasse von verwenden Das Codeigniter-Framework zum Schreiben der Upload-Methode ist vorhanden (oder die Code-Wiederverwendungsrate ist niedrig und verbraucht Ressourcen). Daher habe ich eine leicht optimierte Upload-Methode entwickelt. Und als ich nach Informationen suchte, stellte ich fest, dass es mit dem Codeigniter-Framework schwierig ist, mehrere Dateien gleichzeitig hochzuladen. Deshalb habe ich bei der Optimierung der Methode auch untersucht, wie man das Codeigniter-Framework zum gleichzeitigen Hochladen mehrerer Dateien verwendet. Interessierte Studierende können es gerne zur Kenntnis nehmen. Eventuelle Fehler können gerne korrigiert werden.

1. Datei-Upload-Methode optimieren

Die häufig verwendeten Methoden im Codeigniter-Handbuch werden hier nicht noch einmal beschrieben um den Zweck zu erreichen, die Code-Redundanz zu reduzieren und die Code-Wiederverwendungsrate zu verbessern.

a) Erstellen Sie zunächst eine neue Konfigurationsdatei „upload.php“ in „application/config“

Erstellen Sie eine neue Konfigurationsdatei „upload.php“ in „application/config“ und schreiben Sie die hochgeladene Informationen in den Konfigurationsparametern.

<?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;;

Hinweis: Der durch den Parameter upload_path dargestellte Pfadordner wurde bereits im Projekt erstellt!

b) Laden Sie die Datei-Upload-Klasse in den Konstruktor des Controllers

<?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;);
  }
}

Hinweis: Die Datei „upload php“ wird automatisch erstellt hier geladen.

c) Schreiben Sie die Upload-Methode und führen Sie die Methode do_upload() aus, um die Datei hochzuladen

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);
    }
  }
}

Hinweis: Ein Teil des obigen Codes ist Den Code in meinem Projekt können Sie ignorieren und sich direkt auf den Schlüssel-Upload-Code konzentrieren. Wenn Sie verschiedene Dateien hochladen müssen, können Sie den Datei-Upload auch in der Methode konfigurieren, indem Sie die Methode $this->upload->initialize() verwenden.

2. Zwei Methoden zum gleichzeitigen Hochladen mehrerer Dateien

① Methode 1: Schleifenverarbeitung mehrerer hochgeladener Dateien

/**
 * 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();
      }
    }
  }
}

② Methode 2: Mehrere Dateien direkt hochladen und dann die hochgeladenen Daten verarbeiten

/**
 * 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>";
    }
  }
}

Welche der beiden Methoden ist bequemer? ? Welches ist effizienter? Sie können es selbst ausprobieren!

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Analyse der Bibliotheksdateien und Verwendung von CodeIgniter-Framework-Verifizierungscodes

Informationen zu häufig verwendeten CI-Framework-Kapselungsbildern Verarbeitungsmethode

So verwenden Sie das CodeIgniter-Framework, um die Methode zum Hochladen von Bildern zu implementieren

Das obige ist der detaillierte Inhalt vonSo verwenden Sie das CI-Framework, um Datei-Uploads zu optimieren und mehrere Dateien hochzuladen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn