October CMS extension System / Models / File

Я пытаюсь сохранить исходное имя файла при использовании 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;

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

but the problem is a link to an attached file is still being generated означает, что вам нужно - прекратить генерировать ссылки ИЛИ они не сгенерированы должным образом?
Hardik Satasiya 29.06.2018 08:10

Я имел в виду, что он все еще генерируется оригинальным октябрьским методом CMS. Например, путь к загруженному изображению будет site.com/storage/app/uploads/public/5b3/74f/e7b/5b374fe7b985‌ 6296467891.png, но на самом деле изображение сохраняется в site.com/storage/app/uploads/public /5b3/74f/e7b/logo.png

RedEclipse 30.06.2018 11:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
2
385
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

О, я вижу, похоже, это попытка использовать 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

Link logic ( for referance only ) vendor\october\rain\src\Database\Attach\File.php and 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.

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

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

Спасибо, работает как шарм! Но еще один вопрос, теперь октябрь делает довольно забавный путь к изображению /storage/app/uploads/public/log/op/ng/logo.png, возможно, можно хранить файлы, например, в / storage / app / uploads / public / ?

RedEclipse 02.07.2018 23:31

хм, нужно проверить это, проверим и сообщу вам

Hardik Satasiya 03.07.2018 14:19

Привет, может ты найдешь какое-нибудь решение?

RedEclipse 31.07.2018 15:25

извините, я не получил изменений, чтобы проверить это, но мне нужно отладить из ядра, что является реальной проблемой, извините, но это займет немного времени, так как я сейчас много работаю, поэтому :)

Hardik Satasiya 01.08.2018 11:27

Другие вопросы по теме