Symfony Php:模拟FileUpload并创建UploadedFile

On a Symfony Commandline ContainerAwareCommand I want to emulate a file upload in order to call the following Method:

namespace AppUserBundle\Services;

use PcMagas\AppImageBundle\Filters\Crop\CropFilter;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Imagine\Image\ImageInterface;
use PcMagas\AppImageBundle\Filters\Resize\ResizeToLimitsKeepintAspectRatio;
use PcMagas\AppImageBundle\Filters\Resize\ResizeParams;
use PcMagas\AppImageBundle\Loader\ImageLoaderInterface;
use PcMagas\AppImageBundle\Saver\SaverInterface;
use Imagine\Image\Box;

class ProfileImageGenerator implements UploadedFileProcessor
    const CROP_PARAMS='crop';

     * @var CropFilter
    private $crop=null;

     * @var ThumbnailFilterLoader
    private $thumbnail=null;

     * @var ResizeParams
    private $resizeParams=null;

     * @var ImageLoaderInterface
    private $imageLoader=null;

     * @var SaverInterface
    private $imageSaver=null;

    public function __construct(CropFilter $crop,
                                    ResizeToLimitsKeepintAspectRatio $thumbnail,
                                    ImageLoaderInterface $imageLoader,
                                    SaverInterface $imageSaver,


        if($thumbnailWidth>0 && $this->thumbnailHeight>0){      
            $this->resizeParams= new Box($thumbnailWidth,$thumbnailHeight);

     * {@inheritDoc}
     * @see \AppUserBundle\Services\UploadedFileProcessor::process()
    public function process(UploadedFile $f, array $params) 

                //I implement in such a manner to provide extra prossessings over thumbnail image
            $image=$this->crop->apply($image, $params[self::CROP_PARAMS]);


        return $this->generateFileFromImageInterface($image);

     * @param UploadedFile $f
     * @return ImageInterface
    private function openUploadedFileAsImageInterface(UploadedFile $f)
        return $this->imageLoader($f->getContents());

     * @param ImageInterface $image
     * @return Symfony\Component\HttpFoundation\File
     * @throws RuntimeException
    private function generateFileFromImageInterface(ImageInterface $image)
                return $this->imageSaver->save($image); 

Now I want to see how the method process will behave so I created the following ContainerAwareCommand In order to emulate a file upload:

namespace AppUserBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
use AppUserBundle\Services\ProfileImageGenerator;
use PcMagas\AppImageBundle\Filters\Crop\CropParams;

class CreateProfileImageCommand extends ContainerAwareCommand
    protected function configure()
            ->setDecrtiption("Process a file image like image profile.")
            ->setHelp("This command allows you to generate a file like a process image.")
            ->addArgument('file',InputArgument::REQUIRED,'The image file to process.');

    protected function execute(InputInterface $input, OutputInterface $output)

         * @var AppUserBundle\Services\ProfileImageGenerator $container

        $cropParams=new CropParams(5,5,10,10);
        $file=null;//How To emulate an uploadedfile with realData?

But I am stuck on how to create an Uploadedfile from a filesystem image in order to see whether the image works do you have ansy somt of idea how to do that?


你看过 Symfony Api文档?</ p>

  __ construct(string $ path,string $ originalName,string | null  $ mimeType = null,int | null $ size = null,int | null $ error = null,bool $ test = false)
</ code> </ pre>

=&gt; </ p >

  new UploadedFile($ path,$ originalName,$ mimeType,$ size,$ error,$ test); 
</ code> </ pre>

现在,您可以插入从命令参数获得的路径,并通过</ p>
</ div>传递该路径



Have you looked at the Symfony Api Documentation ?

__construct(string $path, string $originalName, string|null $mimeType = null, int|null $size = null, int|null $error = null, bool $test = false)


new UploadedFile($path, $originalName, $mimeType, $size, $error, $test);

Now you can insert the path you get from the command arguments and pass that through

Csdn user default icon