2013-08-31 78 views
2

我需要檢索圖像並將其從網站保存到本地文件夾。圖像類型巴紐,JPG格式之間和.gif使用WebClient保存帶有相應擴展名的圖像

我使用

string url = @"http://redsox.tcs.auckland.ac.nz/CSS/CSService.svc/"; 
string saveLoc = @"/project1/home_image"; 
using (var wc = new WebClient()) 
{ 
    wc.DownloadFile(url, saveLoc); 
} 

嘗試,但這種保存文件夾中的文件「home_image」沒有延伸而變化。我的問題是你如何確定擴展?有沒有簡單的方法來做到這一點?可以使用HTTP請求的內容類型嗎?如果是這樣,你如何做到這一點?

+0

您需要提供文件名,路徑爲「@」/ project1/home_image/Someimage.png「' – Nilesh

+0

雖然我不知道擴展名,但這是我需要查明的,以便我可以將其保存正確的。 –

+0

您需要從響應的標題中獲取MIME類型,將其映射爲擴展名並使用它。不幸的是,'WebClient'是太高層次的方法,無法讓您訪問標題。 –

回答

0

嘗試這樣的事情

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("Your URL"); 
request.Method = "GET"; 
var response = request.GetResponse(); 
var contenttype = response.Headers["Content-Type"]; //Get the content type and extract the extension. 
var stream = response.GetResponseStream(); 

然後保存流

8

如果你想使用WebClient,那麼你必須從WebClient.ResponseHeaders提取頭信息。您必須先將其存儲爲字節數組,然後在獲取文件信息後保存該文件。

string url = @"http://redsox.tcs.auckland.ac.nz/CSS/CSService.svc/"; 
string saveLoc = @"/project1/home_image"; 

using (WebClient wc = new WebClient()) 
{ 
    byte[] fileBytes = wc.DownloadData(url); 

    string fileType = wc.ResponseHeaders[HttpResponseHeader.ContentType]; 

    if (fileType != null) 
    { 
     switch (fileType) 
     { 
      case "image/jpeg": 
       saveloc += ".jpg"; 
       break; 
      case "image/gif": 
       saveloc += ".gif"; 
       break; 
      case "image/png": 
       saveloc += ".png"; 
       break; 
      default: 
       break; 
     } 

     System.IO.File.WriteAllBytes(saveloc, fileBytes); 
    } 
} 

我喜歡我的擴展名爲3個字母,如果他們可以....個人喜好。如果它不打擾你了,你可以用更換整個switch聲明:

saveloc += "." + fileType.Substring(fileType.IndexOf('/') + 1); 

使代碼有點整潔。

+0

對於ppm文件,MIME類型是image/x-portable-pixmap,因此第二個選項將生成一個「.x-portable-pixmap」文件,該文件可能不會與您的圖像程序相關聯。 – satibel

相關問題