如何在将上传文件保存到PHP目录之前重命名?

时间:2017-12-08 04:53:55

标签: php

我使用这个简单的上传和调整PHP项目的图像来完成我的项目。 https://gist.github.com/zeuxisoo/910107/483c7b6082dcc484d7b4cee21aad12650c53e416 但我不知道如何在上传后重命名文件。 我想重命名文件并将其上传到服务器以及数据库中。以下是代码:

public void UpdatePerson(PersonDetailsDTO dto)
{
    var person = _personRepository.GetById(dto.PersonId);
    Address address = new Address(dto.getStreet1, dto.getStreet2,...);
    PersonalDetails details = new PersonalDetails(dto.getFirstName,dto.getLastName(),...);
    person.updatePersonalDetails(details);
    person.updateAddress(address);
   _personRepository.save(person);
}

我使用了很多方法,例如basename 不管怎么说,任何想法?感谢

3 个答案:

答案 0 :(得分:1)

而不是使用move_uploaded_file,而不是按照下面给出的代码示例使用它。

$temp = explode(".", $_FILES["file"]["name"]);
$newfilename = round(microtime(true)) . '.' . end($temp);
move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $newfilename);

答案 1 :(得分:1)

你可以这样做

public function run() {
    $total = count($this->files);
    for($i=0; $i<$total; $i++) {
        if (empty($this->files['name'][$i]) === false) {

              $tempName = explode(".", $this->files['name'][$i]);
              $newName = "IMAGE_NAME"; //generate unique string to avoid conflict
              $newfilename = $newName . '.' . end($tempName );
            if (move_uploaded_file($this->files['tmp_name'][$i], $this->store_directory.'/'.$newfilename) == false) {
                $this->errors['type'] = "run";
                $this->errors['file_name'] = $this->files['name'][$i];
            }
        }
    }

    return empty($this->errors);
}

$newName中,您可以为文件生成新名称。

更新

为避免冲突,每次生成名称时都使用唯一字符串。

答案 2 :(得分:1)

这是您的解决方案

public function run(){
    $total = count($this->files);
    for($i=0; $i<$total; $i++){
        if(empty($this->files['name'][$i]) === false){
            $ext = substr(strtolower(strrchr($this->files['name'][$i], '.')), 1); //get the extension
            $new_name = 'new-name'.date('dmY').$ext;
            if (move_uploaded_file($this->files['tmp_name'][$i], $this->store_directory.'/'.$new_name) == false) {
                $this->errors['type'] = "run";
                $this->errors['file_name'] = $this->files['name'][$i];
            }
        }
    }
    return empty($this->errors);
}