Symfony3 + VichUploaderBundle +自定义上传目录

时间:2016-04-25 09:53:15

标签: php file-upload symfony symfony-2.8 vichuploaderbundle

我已经使用自定义文件名设置了VichUploaderBundle,它工作正常..

我的相关config.yml:

vich_uploader:
    db_driver: orm

    mappings:
        product_image:
            uri_prefix: '/uploads/products'
            upload_destination: '%kernel.root_dir%/../web/uploads/products'

            namer: namer.product_image
            #namer: vich_uploader.namer_uniqid
            #namer: vich_uploader.namer_origname
            #namer: vich_uploader.namer_property

            inject_on_load:     false
            delete_on_update:   true
            delete_on_remove:   true

我的自定义名称:

public function name($obj, PropertyMapping $mapping)
{
    $file = $mapping->getFile($obj);

    $new_name = $this->generateRandomSecret();

    if ($extension = $file->guessExtension())
    {
        $new_name = $new_name .'.'. $extension;
    }

    return $new_name;
}

但是,我想使用自定义路径上传文件。

我将所需的上传路径保存到会话变量" upload_files_path" 在控制器中并在名称中检索所述路径。

它保存到数据库(id,image_name,udated_at), 但不会将文件写入文件系统!

当我打电话

<img src="{{ vich_uploader_asset(product, 'imageFile') }}" />

在模板中,它返回前面带有&#34; /&#34;的文件路径。 我无法弄清楚如何使它发挥作用。

以下是我对自定义文件路径的配置: 所以我编辑了#34; uri_prefix&#34;和&#34; upload_destination&#34;是空白的。 编辑了config.yml

vich_uploader:
    db_driver: orm

    mappings:
        product_image:
            uri_prefix: ''
            upload_destination: ''

            namer: namer.product_image

            inject_on_load:     false
            delete_on_update:   true
            delete_on_remove:   true

我更新的自定义名称: 在这里,我将上传路径与新文件名连接起来。

public function name($obj, PropertyMapping $mapping)
{
    $file = $mapping->getFile($obj);

    $new_name = $this->generateRandomSecret();

    if ($extension = $file->guessExtension())
    {
        $new_name = $new_name .'.'. $extension;
    }

    $upload_path = $this->container->get('session')->get('upload_files_path');

    $full_path = $upload_path . $new_name;
    return $full_path;
}

感谢您的时间和知识。

1 个答案:

答案 0 :(得分:0)

不要在你的名字内使用会话,因为名字必须是无国籍的。 要自定义目录,您可以使用目录名称。请参阅https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/namers.md#directory-namer

上的文档