VichUploader symfony 4 不上传图像
VichUploader symfony 4 not uploading image
我正在尝试使用 vichuploaderBundle 将图像上传到路径:{project}/public/img/circuits。
我遵循了他的 github 文档:https://github.com/dustin10/VichUploaderBundle/blob/master/docs/index.md
情况是:
我有一个带有 VichImageType
的表格,当我提交带有图像的表格时,我得到了这个:
thumbnailFile: Symfony\Component\HttpFoundation\File\UploadedFile {#91 ▼
-test: false
-originalName: "meme.jpg"
-mimeType: "image/jpeg"
-error: 0
path: "/tmp"
filename: "phpomKjXK"
basename: "phpomKjXK"
pathname: "/tmp/phpomKjXK"
extension: ""
realPath: "/tmp/phpomKjXK"
aTime: 2020-11-26 16:22:10
mTime: 2020-11-26 16:22:10
cTime: 2020-11-26 16:22:10
inode: 262126
size: 79694
perms: 0100600
owner: 1000
group: 1000
type: "file"
writable: true
readable: true
executable: false
file: true
dir: false
link: false
}
我使用这个映射 (vich_uploader.yaml):
vich_uploader:
db_driver: orm
mappings:
circuits:
uri_prefix: /img/circuits
upload_destination: '%kernel.project_dir%/public/img/circuits'
namer: Vich\UploaderBundle\Naming\SmartUniqueNamer
以下是与我实体中的图像相关的代码片段:
/**
* @ORM\Entity(repositoryClass=CircuitRepository::class)
* @Vich\Uploadable
*/
class Circuit
{
/**
* @ORM\Column(type="string", length=255)
*/
private $thumbnail;
/**
* @Vich\UploadableField(mapping="circuits", fileNameProperty="thumbnail")
* @var File|null
*/
private $thumbnailFile;
/**
* @var \DateTime
*/
private $updated_at;
public function getThumbnail(): ?string
{
return $this->thumbnail;
}
public function setThumbnail(string $thumbnail): self
{
$this->thumbnail = $thumbnail;
return $this;
}
/**
* @return File
*/
public function getThumbnailFile(): ?File
{
return $this->thumbnailFile;
}
/**
* @param File $thumbnailFile
*/
public function setThumbnailFile(?File $thumbnailFile): self
{
$this->thumbnailFile = $thumbnailFile;
if ($this->thumbnailFile instanceof UploadedFile)
$this->updated_at = new \DateTime('now');
return $this;
}
}
最后是处理图像输入的表单部分:
->add('thumbnailFile', VichImageType::class, [
'label' => 'Vignette',
'allow_delete' => false,
'download_uri' => false,
'image_uri' => false,
'required' => true,
])
有谁知道为什么我尝试上传的文件没有保存在我的 /public/img/circuits 文件夹中?
谢谢。
编辑:当我创建我的实体时,图像上传并保存得很好,但是有一次我尝试修改它并用另一个图像覆盖实体的现有图像,它从实体中删除它但它不上传新图像.
我找到了解决方法。
所以,这看起来很奇怪,但由于某些原因它起作用了。在处理表单提交时,我需要用它自己的 getter 手动设置缩略图(图像名称变量)的值。现在我可以用另一个图像覆盖图像。
$circuit->setThumbnail($circuit->getThumbnail());
我正在尝试使用 vichuploaderBundle 将图像上传到路径:{project}/public/img/circuits。
我遵循了他的 github 文档:https://github.com/dustin10/VichUploaderBundle/blob/master/docs/index.md
情况是:
我有一个带有 VichImageType
的表格,当我提交带有图像的表格时,我得到了这个:
thumbnailFile: Symfony\Component\HttpFoundation\File\UploadedFile {#91 ▼
-test: false
-originalName: "meme.jpg"
-mimeType: "image/jpeg"
-error: 0
path: "/tmp"
filename: "phpomKjXK"
basename: "phpomKjXK"
pathname: "/tmp/phpomKjXK"
extension: ""
realPath: "/tmp/phpomKjXK"
aTime: 2020-11-26 16:22:10
mTime: 2020-11-26 16:22:10
cTime: 2020-11-26 16:22:10
inode: 262126
size: 79694
perms: 0100600
owner: 1000
group: 1000
type: "file"
writable: true
readable: true
executable: false
file: true
dir: false
link: false
}
我使用这个映射 (vich_uploader.yaml):
vich_uploader:
db_driver: orm
mappings:
circuits:
uri_prefix: /img/circuits
upload_destination: '%kernel.project_dir%/public/img/circuits'
namer: Vich\UploaderBundle\Naming\SmartUniqueNamer
以下是与我实体中的图像相关的代码片段:
/**
* @ORM\Entity(repositoryClass=CircuitRepository::class)
* @Vich\Uploadable
*/
class Circuit
{
/**
* @ORM\Column(type="string", length=255)
*/
private $thumbnail;
/**
* @Vich\UploadableField(mapping="circuits", fileNameProperty="thumbnail")
* @var File|null
*/
private $thumbnailFile;
/**
* @var \DateTime
*/
private $updated_at;
public function getThumbnail(): ?string
{
return $this->thumbnail;
}
public function setThumbnail(string $thumbnail): self
{
$this->thumbnail = $thumbnail;
return $this;
}
/**
* @return File
*/
public function getThumbnailFile(): ?File
{
return $this->thumbnailFile;
}
/**
* @param File $thumbnailFile
*/
public function setThumbnailFile(?File $thumbnailFile): self
{
$this->thumbnailFile = $thumbnailFile;
if ($this->thumbnailFile instanceof UploadedFile)
$this->updated_at = new \DateTime('now');
return $this;
}
}
最后是处理图像输入的表单部分:
->add('thumbnailFile', VichImageType::class, [
'label' => 'Vignette',
'allow_delete' => false,
'download_uri' => false,
'image_uri' => false,
'required' => true,
])
有谁知道为什么我尝试上传的文件没有保存在我的 /public/img/circuits 文件夹中?
谢谢。
编辑:当我创建我的实体时,图像上传并保存得很好,但是有一次我尝试修改它并用另一个图像覆盖实体的现有图像,它从实体中删除它但它不上传新图像.
我找到了解决方法。
所以,这看起来很奇怪,但由于某些原因它起作用了。在处理表单提交时,我需要用它自己的 getter 手动设置缩略图(图像名称变量)的值。现在我可以用另一个图像覆盖图像。
$circuit->setThumbnail($circuit->getThumbnail());