0

我有类似的网址,http://xxx.xxx.xxx/mls/pmmls/12/-8/53/6/12-8536_2.jpg/t1349940727/100x100/ 并且只需要从网址中获取文件名,例如“12-8536_2.jpg"

url format is dynamic. Filename with extension must be in url. but it filename with extension  may not be in last position of url

我已经尝试过 Path.GetFileName() 但它给出了“”。

有谁知道如何为这种类型的 url 提取文件名?

4

5 回答 5

1

无法保证 URL 的任何部分都映射到文件,因此尝试在 URL中获取FileName是没有意义的。

于 2012-11-05T09:49:34.290 回答
0

如果您知道文件名后面总是会跟着另外两个段(在您的示例中,t1349940727100x100),您可以这样做

var input =
    "http://xxx.xxx.xxx/mls/pmmls/12/-8/53/6/12-8536_2.jpg/t1349940727/100x100/";
var uri = new Uri(input);
var fileName = uri.Segments[uri.Segments.Length - 3];

如果您不知道,那么正如其他人所说,没有简单的方法可以判断哪个部分是文件名。你可以试试

var fileName = url.Segments.Last(seg => seg.Contains("."));

得到最后一个带点的段。

于 2012-11-05T10:14:03.140 回答
0

12-8536_2.jpg 似乎不是该 URL 中的文件。在任何情况下,如果 URL 中的“文件名”始终为 .jpg,您可以将 URL 输出为字符串(或AS字符串)并为其输出正则表达式:

string filename = Regex.Match(URL,@"\/([A-Za-z0-9\-._~:?#\[\]@!$%&'()*+,;=]*).jpg").Groups[1].Value

编辑:我认为这是针对特定文件具有不同预览大小的站点。您还可以按如下方式指定不同的可能扩展名(例如):

string filename = Regex.Match(URL,@"\/([A-Za-z0-9\-._~:?#\[\]@!$%&'()*+,;=]*)(.jpg|.JPG|.jpeg|.JPEG)").Groups[1].Value
于 2012-11-05T10:17:08.163 回答
0

您应该定义一个扩展名列表,例如 .jpg、.png .gif(您期望的所有文件类型)。

将您的 url 转换为字符串(如果还没有)并尝试查找扩展的索引。您现在确实知道文件名的位置以及是否有文件名。删除文件名后面的所有内容。

现在找到一个“/”标记,并删除“/”之前(包括)之前的部分,重复此操作,直到您不再找到“/”(例如使用 while 函数)。

有关如何执行此操作的更多信息,请参见此处

于 2012-11-05T10:18:27.370 回答
0
static string getFileName(string url) {
    string[] arr = url.Split('/');
    return arr[arr.Length - 1];
}
于 2016-08-28T22:25:59.533 回答