0

我正在尝试设置 Jodit WYSIWYG,但我发现他们的文档相当混乱。我正在寻找一种在上传时更改文件名的方法。

原因:如果我在根目录中上传了同名的文件名,它将被替换为旧文件。

那么,如何在上传作废时更改文件名替换旧名称文件。

这里的程序是上传图像 3 文件 1.jpg,2.jpg,3.jpg

当调试模式文件的名称在

$files = $_FILES[$source->defaultFilesKey];

在功能上

public function move(Config $source) {
        $files = $_FILES[$source->defaultFilesKey];
        /**
         * @var $output File[]
         */
        $output = [];

        try {
            if (isset($files) and is_array($files) and isset($files['name']) and is_array($files['name']) and count($files['name'])) {
                foreach ($files['name'] as $i => $file) {
                    if ($files['error'][$i]) {
                        throw new \Exception(isset(Helper::$upload_errors[$files['error'][$i]]) ? Helper::$upload_errors[$files['error'][$i]] : 'Error', $files['error'][$i]);
                    }

                    $path = $source->getPath();
                    $tmp_name = $files['tmp_name'][$i];
                    $new_path = $path . Helper::makeSafe($files['name'][$i]);
                    if (!move_uploaded_file($tmp_name, $new_path)) {
                        if (!is_writable($path)) {
                            throw new \Exception('Destination directory is not writeble', Consts::ERROR_CODE_IS_NOT_WRITEBLE);
                        }

                        throw new \Exception('No files have been uploaded', Consts::ERROR_CODE_NO_FILES_UPLOADED);
                    }
                    $file = new File($new_path);

                    try {
                        $this->accessControl->checkPermission($this->getUserRole(), $this->action, $source->getRoot(), pathinfo($file->getPath(), PATHINFO_EXTENSION));
                    } catch (\Exception $e) {
                        $file->remove();
                        throw $e;
                    }

                    if (!$file->isGoodFile($source)) {
                        $file->remove();
                        throw new \Exception('File type is not in white list', Consts::ERROR_CODE_FORBIDDEN);
                    }

                    if ($source->maxFileSize and $file->getSize() > Helper::convertToBytes($source->maxFileSize)) {
                        $file->remove();
                        throw new \Exception('File size exceeds the allowable', Consts::ERROR_CODE_FORBIDDEN);
                    }

                    $output[] = $file;
                }
            }
        } catch (\Exception $e) {
            foreach ($output as $file) {
                $file->remove();
            }
            throw $e;
        }

        return $output;
    }

所以 $file 将名称文件保存在数组中

在此处输入图像描述

我需要 foreach $fiels 并更改 array['name'] 值。但我不知道如何改变它。

在我尝试后更新我得到了一个解决方案,将 foreach 语句用于循环 $files['name']。

public function move(Config $source) {
        $files = $_FILES[$source->defaultFilesKey];
        foreach ($files['name'] as $i => $file) {
            $files['name'][$i] =  round(microtime(true)).($files['name'][$i]);
            }

            /**
             * @var $output File[]
             */
            $output = [];

             .
             .
             .
        }
4

1 回答 1

1

您可以使用php 的saveas方法上传新的重命名文件:

//New name for file
$newName        = date("m-d-Y-h-i-s", time())."-".$filename.'.'.$ext;

$model->files  = CUploadedFile::getInstance($model,'files');



  $fullFileSource = Yii::getPathOfAlias('webroot').'/upload/'.$newName;
  $model->files->saveAs($fullFileSource);
于 2020-02-13T12:26:56.890 回答