10 月 CMS 扩展 System/Models/File
October CMS extend 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;
它适用于文件本身,保留原始名称,但问题是 link 仍在生成附件。打破了我的想法,但无法完成这项工作。任何人都可以详细说明如何解决它吗?
哦,我看到它似乎尝试使用 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
并且当生成 link 时它也使用 disk_name
这是原来的 file_name
现在您的 link 和文件名已同步并且将始终相同。
如有疑问请评论。
我在使用 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;
它适用于文件本身,保留原始名称,但问题是 link 仍在生成附件。打破了我的想法,但无法完成这项工作。任何人都可以详细说明如何解决它吗?
哦,我看到它似乎尝试使用 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
andmodules\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
并且当生成 link 时它也使用 disk_name
这是原来的 file_name
现在您的 link 和文件名已同步并且将始终相同。
如有疑问请评论。