1

我正在使用 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:'/'. 

在这里我发现带有'\'的路径(Windows中的im)不会被'/'替换。

所以我已经覆盖并将线路更改为

relativeFilepath := relativeFilepath replaceAll: pathSeparator first with: $/.

这对我有用,并且来自 css 的调用被指出

http://localhost:8080/files/MyWAFileMetadataLibrary/img/someImage.png.

社区中的任何人都可以验证它并让我知道我是否没有进一步搞砸事情,如果没问题,请你能相应地更正 WAFileMetadaLibrary 吗?

4

1 回答 1

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: '/'. 

所以你可能发现了一个错误。

于 2013-06-30T07:35:35.670 回答