我正在尝试使用Gaufrette Stream Wrapper告诉AsseticBundle转储项目资产的位置,但我不能让它识别它们.
这是我的config_dev.yml的knp_gaufrette部分的样子:
knp_gaufrette:
adapters:
dev_adapter:
local:
directory: /vagrant/test
create: true
filesystems:
dev_adapter:
adapter: dev_adapter
stream_wrapper: ~
Run Code Online (Sandbox Code Playgroud)
我使用一个简单的操作测试了包装器,以确保它已正确注册,并且它工作正常:
public function thanksAction()
{
file_put_contents('gaufrette://dev_adapter/test.txt', "ABC\n", FILE_APPEND);
return new Response(file_get_contents('gaufrette://dev_adapter/test.txt'));
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样设置资产包配置(在config_dev.yml中):
assetic:
read_from: gaufrette://dev_adapter
write_to: gaufrette://dev_adapter
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用console assetic:dump --env=dev我转储资产时出现此错误:
Dumping all dev assets.
Debug mode is on.
10:53:28 [dir+] gaufrette://dev_adapter/css
[RuntimeException]
Unable to create directory gaufrette://dev_adapter/css
assetic:dump [--watch] [--force] [--period="..."] [write_to]
Run Code Online (Sandbox Code Playgroud)
更多的信息:
symfony/symfony:2.5.0
symfony/assetic-bundle:2.3.0
knplabs/knp-gaufrette-bundle:0.1.7
我正在使用KnpGaufretteBundle在Amazon S3上存储图片,我可以使用以下代码轻松创建文件:
public function s3CreatFileAction(Request $request) {
$filesystem = $this->get('knp_gaufrette.filesystem_map')->get('profile_photos');
$filesystem->write('test.txt', 'hello world');
[...]
}
Run Code Online (Sandbox Code Playgroud)
问题是我无法访问该文件...
$filesystem = $this->get('knp_gaufrette.filesystem_map')->get('profile_photos');
$file = $filesystem->get('test.txt');
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
找不到文件"test.txt".
我认为这是因为"test.txt"文件是使用"私有"acl创建的(当我将其公开时,我可以访问它的S3控制台).
所以我的问题是如何在创建对象时定义公共acl?
我正在使用KnpGaufretteBundle来存储音频文件.我能够将给定文件下载到客户端,如下所示:
$filename = "Somefilename.mp3";
$fs = $this->filesystemMap->get('media_fs');
$file = $fs->read($filename);
if($file){
//Create And Return Response
$response = new Response();
$disp = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$variant->getFileName()
);
$response->headers->set('Content-Length', $fs->size($filename));
$response->headers->set('Accept-Ranges', 'bytes');
$response->headers->set('Content-Transfer-Encoding', 'binary');
$response->headers->set('Content-Type', 'application/octet-stream');
$response->headers->set('Content-Disposition', $disp);
$response->setContent($file);
return $response;
}
Run Code Online (Sandbox Code Playgroud)
但是现在我还想将文件流式传输到客户端,而不是使用附件内容配置.基本上我想访问它客户端,就好像我指着我的服务器上的实际mp3.有谁知道如何做到这一点?
我正在尝试使用KNPLabs gaufrette包将图像文件上传到S3.我从S3调试响应时收到以下错误:
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
images.mynamespace.com.s3.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
我已经尝试将base_url参数设置为该端点但仍然得到相同的错误.关于SO的其他问题建议设置我也尝试过的区域.
我试图上传的存储桶位于欧盟西部地区(爱尔兰).无论我尝试什么配置,gaufrette似乎仍然试图使用s3.amazonaws.com
如何正确配置gaufrette?
config.yml:
knp_gaufrette:
adapters:
image_storage:
amazon_s3:
amazon_s3_id: mynamespace_admin.amazon_s3
bucket_name: %amazon_s3_bucket_name%
create: false
options:
create: true
directory: 'dirname'
region: eu-west-1
filesystems:
image_storage:
adapter: image_storage
alias: image_storage_filesystem
Run Code Online (Sandbox Code Playgroud)