我们使用TYPO3 Flow 2.3集成的Resource对象在我们的项目中上传任何类型的文件。我们的File
对象中的定义是:
/**
* @var \TYPO3\Flow\Resource\Resource
* @ORM\ManyToOne
*/
protected $originalresource;
流畅的呼叫如下:
<a class="filelink" data-icon="{file.filetype}" href="{f:uri.resource(resource: file.originalresource)}" target="_blank">{file.name}</a>
此星座中的所有内容都能正常工作,直到用户上传文件而不会像hosts
那样结束。服务器在常规Apache错误样式中显示Not Found
。是否支持没有结尾的文件?为什么会这样?
设置是:
TYPO3:
Flow:
resource:
storages:
defaultPersistentResourcesStorage:
storage: 'TYPO3\Flow\Resource\Storage\WritableFileSystemStorage'
storageOptions:
path: '%FLOW_PATH_DATA%Persistent/Resources/'
targets:
localWebDirectoryPersistentResourcesTarget:
target: 'TYPO3\Flow\Resource\Target\FileSystemSymlinkTarget'
targetOptions:
path: '%FLOW_PATH_WEB%_Resources/Persistent/'
baseUri: '_Resources/Persistent/'
hosts
中_Resources/Persistent/
文件的创建符号链接以散列命名,然后是没有文件结尾的点,指向实际文件。实际文件存在。
答案 0 :(得分:2)
这是一个错误,您可以在此处报告:https://jira.neos.io/
在Flow 3.x中,它运行良好,但资源管理方面发生了重大变化。
在Web / .htaccess中添加一行可以解决问题,但我不能说这是最好的解决方案。
# Perform rewriting of persistent resource files
RewriteRule ^(_Resources/Persistent/.{40})/.+(\..+) $1$2 [L]
# Add this line - consider security
RewriteRule ^(_Resources/Persistent/.{40})/.+ $1. [L]
并回答为什么会发生这种情况 - 默认情况下会将持久资源存储在Data/Persistent/Resources/<hash>
中,并且Web/_Resources/Persistent/<hash>.extension
中存在符号链接。所以标准符号链接看起来像这样:
0c73666545d393d3d2d6b5a2039dceab56fb3aa2.txt -> /www/FLOW/23/Data/Persistent/Resources/0c73666545d393d3d2d6b5a2039dceab56fb3aa2
如果文件没有扩展名,那么最后只有一个点
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3. -> /www/FLOW/23/Data/Persistent/Resources/a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
实际上,ResourceViewHelper(FileSystemPublishingTarget)返回的链接是正确的,但上面的第一个重写规则需要扩展。添加第二个没有扩展名的文件,只需添加即可。最后,在最后将正确的符号链接与哈希和点匹配。