О, кажется, его попытка использовать 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
Теперь ваша ссылка и имя файла синхронизируются и будут всегда одинаковыми.
если есть сомнения, прокомментируйте.