2013-07-01 72 views
0

我正在从一些网站下载很多图片。我可以收集所有的img源文件,但有时候我会得到这样的源文件:something.com/folder/123-其中123是一个gif文件,但链接没有'gif'扩展名。当我像这样保存这个文件时C#下载没有扩展名的图片

link = getLink(); //link = something.com/folder/123 in this example 
myWebClient.DownloadFile(link, link) 

它保存了这个没有扩展名的gif文件。当链接不提供时,我怎样才能得到这个文件的扩展名?我尝试了System.IO.Path.GetFileName(链接),但它不适用于这样的链接。

+0

如果Web服务器未提供扩展名,则无法获得扩展名。尽管你可以尝试从内容类型中推断出它。 –

回答

0

我认为这个问题的答案会做你想要什么: how to identify the extension/type of the file using C#?

这将允许您检测以下MIME类型:从中 http://msdn.microsoft.com/en-us/library/ms775147%28VS.85%29.aspx#Known_MimeTypes

复制/粘贴:

[DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)] 
    static extern int FindMimeFromData(IntPtr pBC, 
      [MarshalAs(UnmanagedType.LPWStr)] string pwzUrl, 
     [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.I1, SizeParamIndex=3)] 
     byte[] pBuffer, 
      int cbSize, 
      [MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed, 
      int dwMimeFlags, 
      out IntPtr ppwzMimeOut, 
      int dwReserved); 

样本用法:

/// <summary> 
/// Ensures that file exists and retrieves the content type 
/// </summary> 
/// <param name="file"></param> 
/// <returns>Returns for instance "images/jpeg" </returns> 
public static string getMimeFromFile(string file) 
{ 
    IntPtr mimeout; 
    if (!System.IO.File.Exists(file)) 
    throw new FileNotFoundException(file + " not found"); 

    int MaxContent = (int)new FileInfo(file).Length; 
    if (MaxContent > 4096) MaxContent = 4096; 
    FileStream fs = File.OpenRead(file); 


    byte[] buf = new byte[MaxContent];   
    fs.Read(buf, 0, MaxContent); 
    fs.Close(); 
    int result = FindMimeFromData(IntPtr.Zero, file, buf, MaxContent, null, 0, out mimeout, 0); 

    if (result != 0) 
    throw Marshal.GetExceptionForHR(result); 
    string mime = Marshal.PtrToStringUni(mimeout); 
    Marshal.FreeCoTaskMem(mimeout); 
    return mime; 
} 
相关问题