如何将 contentType 信息从 Burzum/FileStorage 传递到 KnpLabs/Gaufrette
How to pass contentType information from Burzum/FileStorage to KnpLabs/Gaufrette
CakePHP 3.4 应用程序使用 Burzum/FileStorage plugin (which uses KnpLabs/Gaufrette) 来管理到 AWS S3 的上传。不幸的是,我 运行 遇到了 MS Office 文件(docx、xlsx 等)被检测为 ZIP 文件的问题。
我更改了我的代码以首先使用 finfo,如果它检测到 zip,请查看扩展名以查看它是否可能是 office 文件。现在我可以通过执行 patchEntity 将这个正确的 mimetype 传递给 file_storage table。到目前为止一切顺利。
然而,FileStorage 插件调用 KnpLabs/Gaufrette 实际将文件发送到 S3,但它似乎并没有沿着 mimetype/contenttype 发送。因此 Gaufrette 然后在 AwsS3 Adapter 中使用了它自己的 finfo 小技巧,将元数据字段 'Content-Type: application/zip' 写入 S3 上的项目,导致 Office 文件作为 zip 文件下载...
有没有办法在 AwsS3 适配器的选项中设置正确的内容类型?
谢谢!
这里提到了答案:https://github.com/burzum/cakephp-file-storage/issues/36
可以使用以下代码访问适配器和设置,例如内容类型:
$Adapter = \Burzum\FileStorage\Storage\StorageManager::adapter('S3');
$Adapter->getAdapter()->setMetadata($key, array('contentType' => 'whatever'));
感谢 burzum 指出这一点!
CakePHP 3.4 应用程序使用 Burzum/FileStorage plugin (which uses KnpLabs/Gaufrette) 来管理到 AWS S3 的上传。不幸的是,我 运行 遇到了 MS Office 文件(docx、xlsx 等)被检测为 ZIP 文件的问题。
我更改了我的代码以首先使用 finfo,如果它检测到 zip,请查看扩展名以查看它是否可能是 office 文件。现在我可以通过执行 patchEntity 将这个正确的 mimetype 传递给 file_storage table。到目前为止一切顺利。
然而,FileStorage 插件调用 KnpLabs/Gaufrette 实际将文件发送到 S3,但它似乎并没有沿着 mimetype/contenttype 发送。因此 Gaufrette 然后在 AwsS3 Adapter 中使用了它自己的 finfo 小技巧,将元数据字段 'Content-Type: application/zip' 写入 S3 上的项目,导致 Office 文件作为 zip 文件下载...
有没有办法在 AwsS3 适配器的选项中设置正确的内容类型?
谢谢!
这里提到了答案:https://github.com/burzum/cakephp-file-storage/issues/36
可以使用以下代码访问适配器和设置,例如内容类型:
$Adapter = \Burzum\FileStorage\Storage\StorageManager::adapter('S3');
$Adapter->getAdapter()->setMetadata($key, array('contentType' => 'whatever'));
感谢 burzum 指出这一点!