差不多两个星期前,我创建了类似的关于上传使用的问题OneupUploaderBundle,但是使用了FineUploader库.可悲的是,还没有答案.在此期间,我尝试设置不同的上传库.
我开发上Windows 10 Pro与XAMPP[1],其包括PHP v7.0.8.
我正在使用Symfony v3.1.5,OneupUploaderBundle和Blueimp jQuery上传,以便将文件上传到服务器.
在设置时,我遵循了OneUpUploaderBundle[2]和jQuery file upload[3],[4]的文档.
我想将文件上传到某个目录,然后检查他们的mime类型并验证是否允许上传文件mime类型,之后 - 将它们移动到自定义目录(可以从文件更改为文件),最后我想保留文件路径和文件名到数据库.
文件上传工作正常,文件上传到oneup_uploader_endpoint('gallery').即使是自定义文件Namer也可以上传到自定义目录.
但是,不会调用侦听器(上传侦听器和验证)并显示在Symfony Profiler Events部分中Not Called Listeners!
这是不幸的,因为我想使用Post_Persist事件将有关文件的信息保存到数据库.OneupUploaderBundle事件.
我的services.yml
services:
app.upload_listener:
class: AppBundle\EventListener\UploadListener
arguments: ["@doctrine.orm.entity_manager"]
tags:
- { name: kernel.event_listener, …Run Code Online (Sandbox Code Playgroud) 我尝试使用OneupUploaderBundle上传文件.我多次阅读此捆绑包的文档,但我没有设法找到要上传文件的实体的任何简单示例.我的期望是一个类似于以下的类定义VichUploaderBundle:
<?php
namespace Minn\AdsBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Validator\Constraints as Assert;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* @ORM\Entity
* @Vich\Uploadable
*/
class MotorsAdsFile {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @Assert\File(
* maxSize="5M",
* mimeTypes={"image/png", "image/jpeg"}
* )
* @Vich\UploadableField(mapping="motors_files", fileNameProperty="filename")
* note: This is not a mapped field of entity metadata, just a simple property.
* @var File $file
*/
protected $file;
/**
* @ORM\Column(type="string", length=255, …Run Code Online (Sandbox Code Playgroud) 为了将多个文件上传到我正在使用的服务器:
请注意:
jQuery File Upload示例Basic Plus UI用户界面.(另外,我没有在互联网上找到任何相关的例子).upload progress bar(所有文件通用)和upload button(上传所有添加的文件)所以几乎没有UI!我想创建多个文件上传,这将接近于jQuery File Upload示例Basic Plus UI,但是:
目前至少没有办法确定哪个文件出错了!
例如:我从服务器获得以下JSON响应
data.jqXHR.responseText = {"files":[{"error":"error.maxsize"},{"error":"error.maxsize"}]}
Run Code Online (Sandbox Code Playgroud)
但当时有3个上传的文件 - 所以 - 没有信息哪个错误对应哪个文件!
如果我像这样修改上传监听器:
public function onUpload(PreUploadEvent $event)
{
$file = $event->getFile();
$response = $event->getResponse();
$response['files'] = [
'name'=> $file->getBaseName(),
'type'=> $file->getType(),
'size'=> $file->getSize(),
];
return json_encode($response);
} …Run Code Online (Sandbox Code Playgroud)