2009-06-04 23 views

回答

0

這個表達式可以完成這項工作。

^.*/(?<filename>[^/]+?\.[^/]+)$ 
 
    ^    Anchor to the begining of the string 
    .*    Any character zero or more times 
    /    Slash 
    (?<filename>  Named group 'filename' 
     [^/]+?   Not a slash at least once and captured lazily 
     \.    One file extension separator (dot) 
     [^/]+    Not a slash at leats once 
    )     End of named group 
    $     Anchor to the end of the string 
2

你可能會檢查結束,看它是否看起來像一個文件擴展名,但URL並不實際映射到文件;如果URL被重寫了怎麼辦?

如果你想確定哪些特定URL解析爲,您可以發出一個HEAD請求,並檢查content-typecontent-disposition頭,看內容是暗含的基礎文件,但即使這不是防彈的類型,因爲圖像,PDF等都可以動態生成。

1

你不能。

E.g. http://example.com/files/readme可能是一個文本文件或文件夾(* nix風格的操作系統通常不會添加.txt擴展名)。

即使有文件擴展名,也可能沒有文件,服務器端代碼處理創建內容的URL(例如ASP.NET HttpHandler)。

你爲什麼要這麼做?如果你想檢測URL是否會返回一個文件,你可以用擴展名猜測(記住應用程序可以自由創建它們),但唯一真正的方法是執行HTTP HEAD請求並檢查返回的內容類型(但是你又遇到了什麼是有效的文件MIME類型的問題)。

+0

我需要檢測,如果用戶輸入URL被鏈接到文件系統或不上的一種嘗試。 – 2009-06-04 10:43:12

+0

@Adam:展開。 – Richard 2009-06-04 11:05:06

相關問題