Я пытаюсь сохранить исходное имя файла при использовании 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;
Он работает с самим файлом, сохраняет исходное имя, но проблема в том, что ссылка на прикрепленный файл все еще создается. Сломал себе голову, но не могу выполнить эту работу. Кто-нибудь может уточнить, как это исправить?
Я имел в виду, что он все еще генерируется оригинальным октябрьским методом CMS. Например, путь к загруженному изображению будет site.com/storage/app/uploads/public/5b3/74f/e7b/5b374fe7b985 6296467891.png, но на самом деле изображение сохраняется в site.com/storage/app/uploads/public /5b3/74f/e7b/logo.png






О, я вижу, похоже, это попытка использовать 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.phpandmodules\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 / ?
хм, нужно проверить это, проверим и сообщу вам
Привет, может ты найдешь какое-нибудь решение?
извините, я не получил изменений, чтобы проверить это, но мне нужно отладить из ядра, что является реальной проблемой, извините, но это займет немного времени, так как я сейчас много работаю, поэтому :)
but the problem is a link to an attached file is still being generatedозначает, что вам нужно - прекратить генерировать ссылки ИЛИ они не сгенерированы должным образом?