В настоящее время я пытаюсь сделать возможной загрузку файлов в моем проекте Cakephp 3. У меня есть следующая функция в моем компоненте загрузки, которая сохраняет файлы (которые передаются как входные данные через $ this-> request-> data) в webroot / img / uploads:
public function send( $data )
{
if ( !empty( $data ) ) {
if ( count( $data ) > $this->maxFiles ) {
throw new InternalErrorException("Error Processing Request. Max number files accepted is {$this->max_files}", 1);
}
$fileNames = [];
$count = 0;
foreach ($data as $file) {
$filename = $file['name'];
$file_tmp_name = $file['tmp_name'];
$dir = WWW_ROOT.'img'.DS.'uploads';
$allowed = ['png', 'jpg', 'jpeg'];
if ( !in_array( substr( strrchr( $filename , '.') , 1 ) , $allowed) ) {
// Iterate through extension to sum up what types of files are allowed to upload
$output = "Error Processing Request. It is only allowed to upload files with the following extensions: ";
foreach($this->allowed as $extension){ $output .= $extension . ' '; }
throw new InternalErrorException($output, 1);
}elseif( is_uploaded_file( $file_tmp_name ) ){
debug(Text::uuid().'-'.$filename);
debug($file_tmp_name);
move_uploaded_file($file_tmp_name, $dir.DS.Text::uuid().'-'.$filename);
}
}
}
}
Эта функция действительно сохраняла файлы в указанной папке, но с другим именем файла, чем при отладке Text :: uuid () .’- ‘. $ Filename.
Отладочный вывод:
f5b0ca4f-cb73-4382-b1ca-0eee232ab17a-phinx.png
Имя файла в папке webroot / img / uploads:
4a635fa6-98ea-461e-a98d-0f6ac34c65e7-phinx.png
У меня вопрос: кто-нибудь знает, как получить имя файла, который загружен в папку webroot / img / uploads? Причина, по которой я хочу это сделать, заключается в том, что я хочу сохранить эти пути в базе данных.
Благодаря gmponos важно хранить id Text :: uuid () в отдельной переменной. Это сработало для меня.
public function send( $data )
{
if ( !empty( $data ) ) {
if ( count( $data ) > $this->maxFiles ) {
throw new InternalErrorException("Error Processing Request. Max number files accepted is {$this->max_files}", 1);
}
$fileNames = [];
$count = 0;
foreach ($data as $file) {
$filename = $file['name'];
$file_tmp_name = $file['tmp_name'];
$dir = WWW_ROOT.'img'.DS.'uploads';
$allowed = ['png', 'jpg', 'jpeg'];
if ( !in_array( substr( strrchr( $filename , '.') , 1 ) , $allowed) ) {
// Iterate through extension to sum up what types of files are allowed to upload
$output = "Error Processing Request. It is only allowed to upload files with the following extensions: ";
foreach($this->allowed as $extension){ $output .= $extension . ' '; }
throw new InternalErrorException($output, 1);
}elseif( is_uploaded_file( $file_tmp_name ) ){
$uuid = Text::uuid();
move_uploaded_file($file_tmp_name, $dir.DS.$uuid.'-'.$filename);
}
}
}
}
Других решений пока нет …