CodeIgniter 3. 两次上传图片但文件名不同
CodeIgniter 3. Upload image twice but with different file name
[已解决]
我的控制器功能有问题。我想将一张图片上传两次并保存在同一个目录,但文件名不同。
这是我的表格(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 张相同的图片。 "Random Text" 的文件名无效。
[解决]:控制器文件。我修改了一些行。
参考:哈维尔的回答如下
$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();
}
连续加载上传库两次,即使使用不同的配置数组,也不会做任何事情。如果库已经在内存中,Codeigniter 将忽略第二个 $this->load->library();
语句。这是为了防止冲突、竞争条件等。
您需要:-
- 加载库的第一个实例
- 处理第一次上传
- 卸载库的第一个实例
- 加载库的第二个实例
- 处理第二次上传
第 3 点可以在处理完第一次上传后使用 unset($this->upload);
实现。
删除此行
$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();
}
解释:
[已解决]
我的控制器功能有问题。我想将一张图片上传两次并保存在同一个目录,但文件名不同。
这是我的表格(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 张相同的图片。 "Random Text" 的文件名无效。
[解决]:控制器文件。我修改了一些行。
参考:哈维尔的回答如下
$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();
}
连续加载上传库两次,即使使用不同的配置数组,也不会做任何事情。如果库已经在内存中,Codeigniter 将忽略第二个 $this->load->library();
语句。这是为了防止冲突、竞争条件等。
您需要:-
- 加载库的第一个实例
- 处理第一次上传
- 卸载库的第一个实例
- 加载库的第二个实例
- 处理第二次上传
第 3 点可以在处理完第一次上传后使用 unset($this->upload);
实现。
删除此行
$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();
}
解释: