我有一個Perl應用程序,用於解析MediaWiki SQL表格並顯示來自多個wiki頁面的數據。我需要能夠重新創建的絕對圖像路徑來顯示圖像,例如:.../f/fc/Herbs.jpg/300px-Herbs.jpg
MediaWiki如何組成圖像路徑?
從鏈接到MediaWiki手冊:
Image_Authorisation道:「[圖]路徑可以很容易地從文件中計算名稱和...「
如何計算路徑?
我有一個Perl應用程序,用於解析MediaWiki SQL表格並顯示來自多個wiki頁面的數據。我需要能夠重新創建的絕對圖像路徑來顯示圖像,例如:.../f/fc/Herbs.jpg/300px-Herbs.jpg
MediaWiki如何組成圖像路徑?
從鏈接到MediaWiki手冊:
Image_Authorisation道:「[圖]路徑可以很容易地從文件中計算名稱和...「
如何計算路徑?
一種可能的方法是計算文件的MD5簽名(或數據庫中的文件ID),然後根據該文件構建/查找路徑。
例如,假設我們得到像 「1ff8a7b5dc7a7d1f0ed65aaa29c04b1e」 的MD5簽名
的路徑可能看起來像 「/ 1F/F」 或 「/ 1F/FF/8A」
的原因是你不希望將所有文件放在1個文件夾中,並且希望能夠將它們分區到不同的服務器或SAN中,或以同樣分散的方式進行分區。
MD5簽名是16個「十六進制」字符的字符串。因此,我們的「/ 1F/FF/8A」例如爲我們提供了256個* 256個* 256個文件夾的文件存儲在這應該對任何人:)
更新是不夠的,因爲大衆的需求。
備註 - 我剛剛意識到我們正在專門討論MediaWiki如何做到這一點。這是而不是現在MediaWiki做到了,但是可能已經完成的另一種方式是。
通過 「MD5簽名」 我的意思是做這樣的事情(代碼示例在Perl):
use Digest::MD5 'md5_hex';
my $sig = md5_hex($file->id);
$ SIG現在是長32個字母數字字符: 「1ff8a7b5dc7a7d1f0ed65aaa29c04b1e」
再建一個文件夾結構是這樣的:
my $path = '/usr/local/media';
map { mkdir($path, 0666); $path .= "/$_" } $sig =~ m/^(..)(..)(..)/;
open my $ofh, '>', "$path/$sig"
or die "Cannot open '$path/$sig' for writing: $!";
print $ofh "File contents";
close($ofh);
文件夾結構看起來像
/
usr/
local/
media/
1f/
f8/
a7/
1ff8a7b5dc7a7d1f0ed65aaa29c04b1e
接受的答案不正確:
MD5總和'草藥。jpg'是fceaa5e7250d5036ad8cede5ce7d32d6。前兩個字符是'fc',給出了文件路徑f/fc /,這是示例中給出的。
我一直在爲實際服務器路徑絞盡腦汁3天!謝謝你:) – 2010-03-04 22:36:10
在PHP中,您可以調用以下函數來獲取URL。你可能想看看php代碼來弄清他們如何計算路徑。
$url = wfFindFile(Title::makeTitle(NS_IMAGE, $fileName))->getURL();
我創建了一個名爲reorder.sh從裏面的「圖片」文件移到特定的子文件小bash腳本:
#!/bin/bash
cd /opt/mediawiki/mediawiki-cur/images
for i in `find -maxdepth 1 -type f ! -name .htaccess ! -name README ! -name reorder.sh -printf '%f\n'`; do
path1=$(echo -n $i | md5sum | head -c1) &&
path2=$(echo -n $i | md5sum | head -c2) &&
mkdir -p $path1/$path2/ &&
mv $i $path1/$path2/;
done
這個答案是不正確,每Nohat,以下。 – Rob 2009-01-28 19:38:15
感謝您指出缺乏清晰度。現在修復。 – JDrago 2009-02-02 17:27:20