2012-07-20 19 views
4

是否有可能存儲圖像蒙戈GridFS的直接形成的URL,這是我從API得到什麼?或者我必須在本地存儲它,然後將它插入到mongo中?希望存儲圖像GridFS的從給定的URL

我試圖直接從URL插入,但C#司機給我,URI不受支持的錯誤..

回答

5

的MongoGridFS類實現.NET的流API,所以你應該能夠使用MemoryStream保存Web響應並插入到GridFS中。

try 
{ 
    var server = MongoServer.Create("mongodb://192.168.1.8:27017/imgdb?safe=true"); 
    var db = server.GetDatabase("imgdb"); 

    string fileName = "logo-mongodb.png"; 

    // Get image from URL or API  
    WebRequest req = WebRequest.Create("http://media.mongodb.org/" + fileName); 
    WebResponse response = req.GetResponse(); 
    Console.WriteLine("Response length is " + response.ContentLength + " bytes"); 

    // Copy from WebResponse to MemoryStream 
    MemoryStream memStream; 
    using (Stream responseStream = response.GetResponseStream()) 
    { 
     memStream = new MemoryStream(); 

     byte[] buffer = new byte[1024]; 
     int byteCount; 
     do 
     { 
      byteCount = responseStream.Read(buffer, 0, buffer.Length); 
      memStream.Write(buffer, 0, byteCount); 
     } while (byteCount > 0); 
     responseStream.Close(); 
    } 

    // Reset to beginning of stream 
    memStream.Seek(0, SeekOrigin.Begin); 

    // Save to GridFS  
    var gridFsInfo = db.GridFS.Upload(memStream, fileName); 

    // Success! 
    Console.WriteLine("Success!"); 
} 
catch (Exception err) 
{ 
    Console.WriteLine("Something went wrong: "+err.Message); 
} 
+0

我在response.GetResponseStream()\t無法隱式轉換類型 'System.IO.Stream' 到 'System.IO.MemoryStream' 獲得鑄造錯誤。我還用它在控制檯應用程序,而不是網站 – 2012-07-22 02:07:47

+0

@StewieGriffin:道歉,粘貼僞造的版本。與一個工程進行更新。 – Stennie 2012-07-22 08:31:57