Октябрь CMS Расширение Система / Модели / Файл - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь сохранить исходное имя файла при использовании System / Models / File, я получил следующий код для расширения этой модели:

    namespace System\Models;
class NewFile extends File { public function fromPost($uploadedFile) { if ($uploadedFile === null) { return; }

  $this->file_name = $uploadedFile->getClientOriginalName();
  $this->file_size = $uploadedFile->getClientSize();
  $this->content_type = $uploadedFile->getMimeType();
  $this->disk_name = $this->getDiskName();

  /*
   * getRealPath() can be empty for some environments (IIS)
   */
  $realPath = empty(trim($uploadedFile->getRealPath()))
      ? $uploadedFile->getPath() . DIRECTORY_SEPARATOR . $uploadedFile->getFileName()
      : $uploadedFile->getRealPath();

  //$this->putFile($realPath, $this->disk_name);
  $this->putFile($realPath, $this->file_name);

  return $this;

Работает с самим файлом, сохраняет оригинальное имя, но проблема в том, что ссылка на вложенный файл все еще генерируется. Сломал мой разум, но не могу получить эту работу. Кто-нибудь может уточнить, как это исправить?

1 Ответ

0 голосов
/ 30 июня 2018

О, кажется, его попытка использовать disk_name для генерации URL

чтобы вы хорошо справились с сохранением изображения

//$this->putFile($realPath, $this->disk_name);
$this->putFile($realPath, $this->file_name);

но вам просто нужно заменить одну строку .. просто отмените ваши изменения и сделайте это одно изменение

 $this->file_name = $uploadedFile->getClientOriginalName();
 $this->file_size = $uploadedFile->getClientSize();
 $this->content_type = $uploadedFile->getMimeType();
 // $this->disk_name = $this->getDiskName();  
 $this->disk_name = $this->file_name; 
 // use same file_name for disk ^ HERE

Логика связи ( только для ссылки ) vendor\october\rain\src\Database\Attach\File.php и modules\system\models\File.php

/**
 * Returns the public address to access the file.
 */
public function getPath()
{
    return $this->getPublicPath() . $this->getPartitionDirectory() . $this->disk_name;
}

/**
* Define the public address for the storage path.
*/
public function getPublicPath()
{
    $uploadsPath = Config::get('cms.storage.uploads.path', '/storage/app/uploads');

    if ($this->isPublic()) {
        $uploadsPath .= '/public';
    }
    else {
        $uploadsPath .= '/protected';
    }

    return Url::asset($uploadsPath) . '/';
}

Просто сделайте disk_name также как file_name, чтобы при сохранении файла на диске он использовал original name, а при создании ссылки он также использовал disk_name, который является оригинальным file_name

Теперь ваша ссылка и имя файла синхронизируются и будут всегда одинаковыми.

если есть сомнения, прокомментируйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...