Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带有jQuery文件上载UI的OneUploader_Php_Jquery_Symfony_Multi Upload_Oneupuploaderbundle - Fatal编程技术网

Php 带有jQuery文件上载UI的OneUploader

Php 带有jQuery文件上载UI的OneUploader,php,jquery,symfony,multi-upload,oneupuploaderbundle,Php,Jquery,Symfony,Multi Upload,Oneupuploaderbundle,我正在尝试在symfony2网站上使用OneUploaderBundle设置jQuery文件上载UI 在经历了很多痛苦之后,上传过程按我所希望的那样工作,但我无法让Json响应在上传过程中起作用 我使用了OneUploaderBundle的postPloadeEvent,并绑定了很多解决方案来向jQuery文件上传UI发送corecte jSon响应,但在上传文件时仍然会收到一条错误消息 在doc中,请求发送如下回复: {"files": [ { "name": "picture1.

我正在尝试在symfony2网站上使用OneUploaderBundle设置jQuery文件上载UI

在经历了很多痛苦之后,上传过程按我所希望的那样工作,但我无法让Json响应在上传过程中起作用

我使用了OneUploaderBundle的postPloadeEvent,并绑定了很多解决方案来向jQuery文件上传UI发送corecte jSon响应,但在上传文件时仍然会收到一条错误消息

在doc中,请求发送如下回复:

{"files": [
  {
    "name": "picture1.jpg",
    "size": 902604,
    "url": "http:\/\/example.org\/files\/picture1.jpg",
    "thumbnail_url": "http:\/\/example.org\/files\/thumbnail\/picture1.jpg",
    "delete_url": "http:\/\/example.org\/files\/picture1.jpg",
    "delete_type": "DELETE"
  }
]}
这是我的:

{"files": [ 
    { 
    "url": "\/ishowpro-cms\/web\/app_dev.php\/library\/file\/image\/originals\/51dbd9a13a065-screen-shot-mini.png",     
    "thumbnail_url": "\/ishowpro-cms\/web\/app_dev.php\/library\/file\/image\/thumbnails\/51dbd9a13a065-screen-shot-mini.png", 
    "name": "screen-shot-mini.png", 
    "type": "image/png", 
    "size": 1192, 
    "delete_url": "http://nourltodelete.com", 
    delete_type: "DELETE" 
    } 
] }
URL是正常的。 我试着用同样的回答

return new JsonResponse($jsonResponse); 
使用普通响应对象和json头,我尝试创建一个实体并序列化它:

$responseObjectFile = new JqUploaderFile();
$responseObjectFile->setName();
$responseObjectFile->setSize();
$responseObjectFile->setUrl();
$responseObjectFile->setThumbnail_url();
$responseObjectFile->setDelete_url($this->router->generate('show_image_link', array('slug'=>$file->getSlug(), 'extension'=>$file->getExtension(), 'size'=>'originals'), true));
$responseObjectFile->setDelete_type("DELETE");  


//create serializer to encode Entity
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new GetSetMethodNormalizer());
$serializer = new Serializer($normalizers, $encoders);

$jsonContent = $serializer->serialize($responseObjectFile, 'json');


//add entity in array and unserilize it....
$responseCode = array('files'=>array($jsonContent) );
还可以使用$event->getRequest();物体的形状。 但什么都不管用

有人能帮我吗? 先谢谢你


这是完整的文件

<?php

namespace Reyner\Ishowpro\LibraryBundle\Upload;

use Oneup\UploaderBundle\Event\PostUploadEvent;
use Oneup\UploaderBundle\Event\PreUploadEvent;
use Reyner\Ishowpro\LibraryBundle\Tools\Tools;

use Reyner\Ishowpro\LibraryBundle\Entity\Folder;
use Reyner\Ishowpro\LibraryBundle\Entity\File;
use Reyner\Ishowpro\LibraryBundle\Entity\JqUploaderFile;

use Symfony\Component\HttpFoundation\File\File as sfFile;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;

use Gaufrette\File as GaufretteFile;


class UploadListener
{
    private $doctrine;
    private $logger;
    private $router;


    public function __construct($doctrine, $logger, \Symfony\Bundle\FrameworkBundle\Routing\Router $router)
    {
        $this->doctrine = $doctrine;
        $this->logger = $logger;  
        $this->router = $router;
    }


    public function onPreUpload(PreUploadEvent $event)
    {           
        $file = $event->getFile();

    }
    public function onUpload(PostUploadEvent $event)
        {
            $this->logger->info('----------------------------------------------------');
            $this->logger->info('------------------    service begin ----------------------');


            $request = $event->getRequest();
            //$requestFile = $request->files->all();
            //$this->logger->info($requestFile["files"][0]->getClientOriginalName());

            $em = $this->doctrine->getManager();

            $tempfile = $event->getFile();


            $parameters = $request->request->all();



        /*  getFile: Get the uploaded file. Is either an instance of Gaufrette\File or Symfony\Component\HttpFoundation\File\File.
            getRequest: Get the current request including custom variables.
            getResponse: Get the response object to add custom return data.
            getType: Get the name of the mapping of the current upload. Useful if you have multiple mappings and EventListeners.
            getConfig: Get the config of the mapping.
        */


                $parameters = $request->query->all();

                //stock ids to add "new" badges
                $newIds = array();

                    $folder  = $em->getRepository('LibraryBundle:Folder')->find($request->getSession()->get('currentFolder'));
                    $library = $em->getRepository('LibraryBundle:Library')->find($request->getSession()->get('libraryId'));
                //  $this->logger->info('folder: '.$folder->getId());

                    //persit in BDD
                    $file = new File();
                    $file->setLibrary($library);
                    $file->setFolder($folder);

                    $file->setSize($tempfile->getSize());

                    $filenamePart = explode("--", $tempfile->getName());
                    $pathinfo = pathinfo($tempfile->getName());

                    $file->setExtension(strtolower($pathinfo["extension"]));
                    $file->setName($pathinfo['filename']);




                    //check mime type and correct it if docx, xlsx or pptx
                    if(Tools::getMymeTypeFromExt($pathinfo["extension"])){
                        $file->setMimetype(Tools::getMymeTypeFromExt($pathinfo["extension"]));
                    }else{
                        $fi = new \finfo(FILEINFO_MIME_TYPE);
                        $file->setMimetype($fi->buffer($tempfile->getContent()));
                    }

                    $file->setFilename($filenamePart[1]);

                    $em->persist($file);
                    $em->flush();





                    //create thumb
                    if($file->isImage()){
                        $this->logger->info('is an Image');

                        $imagepath = $file->getLocalFileDirectory().$tempfile->getName();
                        $this->logger->info('image path: '.$imagepath);

                        $file->encodeAndMoveFile($imagepath);

                        $this->logger->info('----------------------------------------------------');
                    }else{
                        $this->logger->info('is not an Image');
                        $this->logger->info($file->getLocalFileDirectory().$tempfile->getName());

                        $file->moveTempFile($file->getLocalFileDirectory().$tempfile->getName());
                    }


                    //add id to the New session array
                    if($request->getSession()->get("newfilesids")){
                        $newIds = unserialize($request->getSession()->get("newfilesids"));
                    }
                    $newIds[] = $file->getId();

                    $request->getSession()->set("newfilesids", serialize($newIds));
                    $this->logger->info('JqUploaderFile');

                    $this->logger->info('----------------------------------------------------');

                    /********************************************
                     * 
                     * BUILD RESPONSE
                     * 
                     ******************************************/
                    $this->logger->info('BUILD RESPONSE');
            /*//test1       
                    //create object needed to JqUploader response
                    $responseObjectFile = new JqUploaderFile();
                    $responseObjectFile->setName($file->getFileName());
                    $responseObjectFile->setSize($file->getSize());
                    $responseObjectFile->setUrl($this->router->generate('show_image_link', array('slug'=>$file->getSlug(), 'extension'=>$file->getExtension(), 'size'=>'originals'), true));
                    $responseObjectFile->setThumbnail_url($this->router->generate('show_image_link', array('slug'=>$file->getSlug(), 'extension'=>$file->getExtension(), 'size'=>'thumbnails'), true));
                    $responseObjectFile->setDelete_url($this->router->generate('show_image_link', array('slug'=>$file->getSlug(), 'extension'=>$file->getExtension(), 'size'=>'originals'), true));
                    $responseObjectFile->setDelete_type("DELETE");  
                    $this->logger->info('-------------------------------------------------------');

                    $this->logger->info('ENTITY READY');
            */  

            //test 2        
                    $response = $event->getResponse();
                    $response["file"][]['name'] = $file->getFileName();
                    $response["file"][]['size'] = $file->getSize();
                    $response["file"][]['url'] = $this->router->generate('show_image_link', array('slug'=>$file->getSlug(), 'extension'=>$file->getExtension(), 'size'=>'originals'), true);
                    $response["file"][]['thumbnail_url'] = $this->router->generate('show_image_link', array('slug'=>$file->getSlug(), 'extension'=>$file->getExtension(), 'size'=>'thumbnails'), true);
                    $response["file"][]['delete_url'] = $this->router->generate('show_image_link', array('slug'=>$file->getSlug(), 'extension'=>$file->getExtension(), 'size'=>'originals'), true);
                    $response["file"][]['delete_type'] = "DELETE";


                    return $response;       




        //test 3
        /*
                $jsonResponse = '{"files": [ { "url": '.json_encode($this->router->generate('show_image_link', array('slug'=>$file->getSlug(), 'extension'=>$file->getExtension(), 'size'=>'originals'), true)).',  "thumbnail_url": '.json_encode($this->router->generate('show_image_link', array('slug'=>$file->getSlug(), 'extension'=>$file->getExtension(), 'size'=>'thumbnails'), true)).',  "name": '.json_encode($file->getFileName()).', "type": "'.$file->getMimeType().'", "size": '.$file->getSize().', "delete_url": "http://nourltodelete.com", "delete_type": "DELETE" } ] }';
                return $jsonResponse;

        */          



        }

}
doctrine=$doctrine;
$this->logger=$logger;
$this->router=$router;
}
公共函数onPreUpload(PreUploadEvent$event)
{           
$file=$event->getFile();
}
公共功能onUpload(postploadevent$事件)
{
$this->logger->info('---------------------------------------------------------------');
$this->logger->info('--------------服务开始--------------------);
$request=$event->getRequest();
//$requestFile=$request->files->all();
//$this->logger->info($requestFile[“files”][0]->getClientOriginalName());
$em=$this->doctrine->getManager();
$tempfile=$event->getFile();
$parameters=$request->request->all();
/*getFile:获取上载的文件。是Gaufrete\file或Symfony\Component\HttpFoundation\file的实例。
getRequest:获取包含自定义变量的当前请求。
getResponse:获取响应对象以添加自定义返回数据。
getType:获取当前上载的映射的名称。如果您有多个映射和EventListener,则此选项非常有用。
getConfig:获取映射的配置。
*/
$parameters=$request->query->all();
//添加“新”徽章的库存ID
$newIds=array();
$folder=$em->getRepository('LibraryBundle:folder')->find($request->getSession()->get('currentFolder');
$library=$em->getRepository('LibraryBundle:library')->find($request->getSession()->get('libraryId');
//$this->logger->info('folder:'。$folder->getId());
//BDD中的persit
$file=新文件();
$file->setLibrary($library);
$file->setFolder($folder);
$file->setSize($tempfile->getSize());
$filenamePart=explode(“-”,$tempfile->getName());
$pathinfo=pathinfo($tempfile->getName());
$file->setExtension(strtolower($pathinfo[“extension”]);
$file->setName($pathinfo['filename']);
//检查mime类型,如果是docx、xlsx或pptx,请更正它
if(工具::getMymeTypeFromExt($pathinfo[“扩展名])){
$file->setMimetype(工具::getMymeTypeFromExt($pathinfo[“extension”]);
}否则{
$fi=new\finfo(FILEINFO\u MIME\u类型);
$file->setMimetype($fi->buffer($tempfile->getContent());
}
$file->setFilename($filenamePart[1]);
$em->persist($file);
$em->flush();
//创造拇指
如果($file->isImage()){
$this->logger->info('是图像');
$imagepath=$file->getLocalFileDirectory()。$tempfile->getName();
$this->logger->info('image path:'。$imagepath);
$file->encodeAndMoveFile($imagepath);
$this->logger->info('---------------------------------------------------------------');
}否则{
$this->logger->info('不是图像');
$this->logger->info($file->getLocalFileDirectory()。$tempfile->getName());
$file->moveTempFile($file->getLocalFileDirectory()。$tempfile->getName());
}
//将id添加到新会话数组
如果($request->getSession()->get(“newfilesids”)){
$newIds=unserialize($request->getSession()->get(“newfilesids”);
}
$newIds[]=$file->getId();
$request->getSession()->set(“newfilesids”,序列化($newIds));
$this->logger->info('JqUploaderFile');
$this->logger->info('---------------------------------------------------------------');
/********************************************
* 
*构建响应
* 
******************************************/
$this->logger->info('BUILD RESPONSE');
/*//测试1
//创建JqUploader响应所需的对象
$responseObjectFile=新的JqUploaderFile();
$responseObjectFile->setName($file->getFileName());
$responseObjectFile->setSize($file->getSize());
$responseObjectFile->setUrl($this->router->generate('show_image_link',array('slug'=>$file->getSlug(),'extension'=>$file->getExtension(),'size'=>originals'),true));
$responseObjectFile->setThumbnail\uURL($this->router->generate('show\u image\u link',array('slug'=>$file->getSlug(),'extension'=>$file->getExtension(),'size'=>'thumbnails'),true));
$respons
$response = $event->getResponse();

$files = array();
$files[0] = array(
        'name' => $file->getFileName(),
            'size' => $file->getSize(),
            'url'  => "Your URL",
            'thumbnail_url' => "Your thumb URL",
            'delete_url'   =>"Your delete URL",
            'delete_type' => 'DELETE'
            );
$response['files'] = $files;