簡體   English   中英

CodeIgniter 3. 上傳圖片兩次,但文件名不同

[英]CodeIgniter 3. Upload image twice but with different file name

[解決了]

我的 controller 中的 function 有問題。 我想將單個圖像上傳兩次並將其保存在同一目錄中,但文件名不同。

這是我的表單(view.php):

<form action="<?php echo base_url("process/testFunction"); ?>" enctype="multipart/form-data" method="post">
 <input type="file" name="file_data" size="50" required>
 <input type="hidden" name="user_id" value="<?php echo $this->session->userdata('user_id'); ?>" readonly>
 <input type="hidden" name="purpose" value="Picture" readonly>
 <input type="submit" value="Save Changes">
</form>

controller.php:

function testFunction(){
 $userID = $this->input->post('user_id');
 $purpose = $this->input->post('purpose');
 $randomText = time();

 if($purpose == "Picture"){
  $uploadPath = "./uploads/images/";
  $allowedTypes = "jpg|jpeg|png";
  $maxSize = 10000000;
  $fileName = "PP_".$userID.".jpeg";
  $fileName2 = "PP_".$userID."_".$randomText.".jpeg"; //for backup
 }

 $config = array(
   'upload_path' => $uploadPath,
   'allowed_types' => $allowedTypes,
   'max_size' => $maxSize, 
   'file_name' => $fileName
 );

 $configClone = array(
   'upload_path' => $uploadPath,
   'allowed_types' => $allowedTypes,
   'max_size' => $maxSize, 
   'file_name' => $fileName2
 );

 $this->load->library('upload', $config);
 $this->load->library('upload', $configClone);

 if($this->upload->do_upload('file_data')){
   echo "Uploaded";
 }else{
   echo $this->upload->display_errors();
 }
}

我的代碼中目前正在發生的事情是。 雖然它上傳了 2 張相同的圖像。 帶有“隨機文本”的文件名不起作用。

[解決方案] :controller 文件。 我修改了一些行。

參考:下面哈維爾的回答

$this->load->library('upload', $config);
if($this->upload->do_upload('file_data')){
 unset($this->upload);
 $this->load->library('upload', $configClone);
 $this->upload->do_upload('file_data');
   echo "Uploaded";
}else{
   echo $this->upload->display_errors();
}

連續兩次加載上傳庫,即使使用不同的配置 arrays,也不會做任何事情。 Codeigniter 將忽略第二個$this->load->library(); 如果庫已經在 memory 上,則聲明。 這是為了防止沖突、競爭條件等。

你需要: -

  1. 加載庫的第一個實例
  2. 處理第一次上傳
  3. 卸載庫的第一個實例
  4. 加載庫的第二個實例
  5. 處理第二次上傳

例如,可以使用unset($this->upload);來實現第 3 點。 處理第一次上傳后。

刪除此行

$this->load->library('upload', $configClone);

改變

if($this->upload->do_upload('file_data')){
   $this->upload->initialize($configClone);
   if($this->upload->do_upload('file_data')){
        echo "Uploaded";
   }else{
        echo $this->upload->display_errors();
   }
 }else{
   echo $this->upload->display_errors();
 }

說明: Javier Larroulet 的回答

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM