我正在使用WAFileMetadataLibrary,我发现了
可能存在的问题addFileAt: aPath relativeToRootDirectory: relativeRootDirectory.
我遇到的问题是一些带有(../ img / someImage.png)的css越来越指向
http://localhost:8080/files/img/someImage.png
而不是
http://localhost:8080/files/MyWAFileMetadataLibrary/img/someImage.png
进一步查看代码后我发现在addFileAt:aPath relativeToRootDirectory:relativeRootDirectory。
有一行
relativeFilepath := relativeFilepath replaceAll: pathSeparator with:'/'.
在这里,我发现'\'( im in windows )的路径不会被'/'替换。
所以我有了覆盖并将行更改为
relativeFilepath := relativeFilepath replaceAll: pathSeparator first with: $/.
对我有用,来自css的调用指向
http://localhost:8080/files/MyWAFileMetadataLibrary/img/someImage.png
。
社区中的任何人都可以验证它并让我知道我是不是要进一步搞乱,如果可以的话,请问你能否正确地修改WAFileMetadaLibrary?
答案 0 :(得分:2)
我刚检查了Seaside 30和Seaside 3.1(使用Pharo CI服务器https://ci.inria.fr/pharo-contribution/)。
在Seaside 3.1中,代码是
addFileAt: aPath relativeToRootDirectory: relativeRootDirectory
| relativeFilepath pathSeparator |
relativeFilepath := aPath allButFirst: relativeRootDirectory size.
pathSeparator := GRPlatform current pathSeparator.
(relativeFilepath first = pathSeparator first)
ifTrue: [ relativeFilepath := relativeFilepath allButFirst ].
relativeFilepath := relativeFilepath replaceAll: pathSeparator first with: $/.
self addFileNamed: relativeFilepath
contents: (GRPlatform current
contentsOfFile: aPath
binary: (self isBinaryAt: aPath))
你的修复看起来不错。
确实在Seaside 30
relativeFilepath := relativeFilepath replaceAll: pathSeparator first with: '/'.
所以你可能发现了一个错误。