ilya-valyaev / far-symfony2-jquery-upload
将 JqueryUpload 集成到 Symfony2,使用 OneUpFlySystem
Requires
- php: >=5.3.9
- doctrine/doctrine-bundle: ~1.4
- doctrine/orm: ^2.4.8
- friendsofsymfony/rest-bundle: ^1.7
- imagine/imagine: ^0.6.3
- incenteev/composer-parameter-handler: ~2.0
- jms/serializer-bundle: ^1.1
- oneup/flysystem-bundle: ^1.2
- sensio/distribution-bundle: ~4.0
- sensio/framework-extra-bundle: ^3.0.2
- symfony/assetic-bundle: ~2.3
- symfony/finder: ^3.0
- symfony/monolog-bundle: ~2.4
- symfony/swiftmailer-bundle: ~2.3
- symfony/symfony: 2.7.*
Requires (Dev)
- sensio/generator-bundle: ~2.3
- symfony/phpunit-bridge: ~2.7
This package is not auto-updated.
Last update: 2024-09-20 20:46:49 UTC
README
此包通过使用 1up-lab/OneUpFlySystemBundle 文件系统抽象层,将 BlueImp/Jquery Upload Plugin 的 symfony2 集成。
项目 faparicior/FARSymfony2UploadDemo 是测试此包的示例。
安装
步骤 1: 下载包
打开命令行,进入您的项目目录,并执行以下命令以下载此包的最新稳定版本
$ composer require faparicior/far-symfony2-jquery-upload "~1"
此命令要求您全局安装 Composer,具体请参阅 Composer 文档中的 安装章节。
步骤 2: 启用包
然后,通过将其添加到项目的 app/AppKernel.php 文件中注册的包列表来启用该包
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new faparicior\FARSymfony2UploadBundle\FARSymfony2UploadBundle(), ); // ... } // ... }
步骤 3: 配置包
- 在
app/config/routing.yml中添加以下行
far_symfony2_upload: resource: "@FARSymfony2UploadBundle/Controller/" type: annotation prefix: "/farupload"
- 在
app/config/config.yml中添加包所需的配置
far_symfony2_upload: prefix: "farupload" temp_path: "%kernel.root_dir%/../web/tmp" thumbnail_directory_prefix: "thumbnails" thumbnail_driver: "gd" thumbnail_size: "80x80" max_file_size: 100000 max_files_upload: 2 file_extensions_allowed: ["jpg", "png", "gif"] local_filesystem: "local_filesystem" remote_filesystem: "remote_filesystem"
-
在
app/config/config.yml中添加 OneUpFlySystem 包所需的配置
oneup_flysystem: adapters: local_adapter: local: directory: %kernel.root_dir%/../web/tmp writeFlags: ~ linkHandling: ~ remote_adapter: local: directory: %kernel.root_dir%/../web/images writeFlags: ~ linkHandling: ~ filesystems: my_filesystem: adapter: local_adapter mount: local_filesystem remote_filesystem: adapter: remote_adapter mount: remote_filesystem
- 您可以在开发中看到新添加的路由。
$ php app/console debug:router
farsymfony2upload_default_upload POST ANY ANY /farupload/upload/{id_session}
farsymfony2upload_default_delete POST|DELETE ANY ANY /farupload/tmp/{php_session}/{id_session}/{image}_{action}
使用方法
在上传 JavaScript 动作中
您的 JavaScript 开发需要一个 UID 来标识上传。该包使用 php_session 和 UID 生成临时目录结构。
在保存 symfony2 动作中
这是一个 symfony2 保存操作的示例。
使用存储 id_session 变量的 php_session 和 UID,您可以获取上传中涉及的文件。
getListFilesLocal 函数返回一个类似这样的文件数组
{
"files": [
{
"type": "file",
"timestamp": 1451316072,
"size": 66664,
"pathOrig": "d0i8nvm9p9h3v9k08vn8jl1qs7/123/60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"dirnameOrig": "d0i8nvm9p9h3v9k08vn8jl1qs7/123",
"basenameOrig": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"extensionOrig": "jpeg",
"filenameOrig": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original",
"pathDest": "d0i8nvm9p9h3v9k08vn8jl1qs7/123/60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg"
"dirnameDest": "d0i8nvm9p9h3v9k08vn8jl1qs7/123"
"basenameDest": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"extensionDest": "jpeg",
"filenameDest": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original",
}
]
}
setListFilesPathRemote 函数返回一个文件数组,它为文件系统建立来源和目标
{
"files": [
{
"type": "file",
"timestamp": 1451316072,
"size": 66664,
"pathOrig": "d0i8nvm9p9h3v9k08vn8jl1qs7/123/60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"dirnameOrig": "d0i8nvm9p9h3v9k08vn8jl1qs7/123",
"basenameOrig": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"extensionOrig": "jpeg",
"filenameOrig": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original",
"pathDest": "123/60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"dirnameDest": "123",
"basenameDest": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"extensionDest": "jpeg",
"filenameDest": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original",
}
]
}
syncFilesLocalRemote 将文件从临时存储复制到最终存储。此函数返回一个包含结果的数组。包含告知复制的或重写的文件属性
的属性。
{
"files": [
{
"type": "file",
"timestamp": 1451316072,
"size": 66664,
"pathOrig": "d0i8nvm9p9h3v9k08vn8jl1qs7/123/60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"dirnameOrig": "d0i8nvm9p9h3v9k08vn8jl1qs7/123",
"basenameOrig": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"extensionOrig": "jpeg",
"filenameOrig": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original",
"pathDest": "123/60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"dirnameDest": "123",
"basenameDest": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original.jpeg",
"extensionDest": "jpeg",
"filenameDest": "60aca821-0104-405c-8a3f-a1ac8a0041ff-original",
"saved": true,
"duplicated": true
}
]
}
deleteFilesLocal 清理临时文件。并返回与 syncFilesLocalRemote 相同的数组。
在调用 syncFilesLocalRemote 之前,您可以在数组中修改 pathDest、dirnameDest、basenameDest、extensionDest、filenameDest 元素,以将文件保存到另一个目的地。
/** * @Route("/save/{id_session}") * @Method("POST") * * @param string $id_session * * @return JsonResponse */ public function saveAction($id_session) { $php_session = $this->get('session')->getId(); $FARUpload = $this->get('far_symfony2_upload_bundle.far_symfony2_upload_lib.service'); $files = $FARUpload->getListFilesLocal($php_session, $id_session); $files = $FARUpload->setListFilesPathRemote($files, $id_session); $files = $FARUpload->syncFilesLocalRemote($files, true); $files = $FARUpload->deleteFilesLocal($files); return new JsonResponse(array('files' => $files)); }