2009-06-12 84 views
7

我試圖用C#將SOAP API上傳到Magento網站。通過Magento SOAP API上傳圖片

這就是我到目前爲止,但它不工作,沒有例外拋出或任何東西,但當我去看看網站上的圖像是空白的。

我需要做Base64Encode嗎?我只是真的嘗試過,因爲this PHP示例做了類似的事情。如果我在沒有得到SOAP異常的情況下嘗試它,並顯示錯誤消息「錯誤請求」。

FileStream fs = File.OpenRead(@"c:\1.jpg"); 
    StreamReader sr = new StreamReader(fs); 

    string fileConent = sr.ReadToEnd(); 

    byte[] encbuff = Encoding.UTF8.GetBytes(fileConent); 
    string enc = Convert.ToBase64String(encbuff); 

    var imageEntity = new catalogProductImageFileEntity(); 
    imageEntity.content = enc; 
    imageEntity.mime = "image/jpeg"; 
    sr.Close(); 
    fs.Close(); 

    var entityP = new catalogProductAttributeMediaCreateEntity(); 
    entityP.file = imageEntity; 
    entityP.types = new[] {"image", "small_image", "thumbnail"}; 
    entityP.position = "0"; 
    entityP.exclude = "0"; 

    _m.catalogProductAttributeMediaCreate(MageSessionProvider.GetSession(), SKU, entityP, "default"); 

回答

14

這花了我天的工作了....這是如何做到這一點

public void UploadProductImage(string SKU, string path) 
     { 
      var imageStream = new MemoryStream(); 

      using (var i = Image.FromFile(@"c:\ProductImages\" + path)) 
      { 
         i.Save(imageStream, ImageFormat.Jpeg); 
      } 
       byte[] encbuff = imageStream.ToArray(); 

      string enc = Convert.ToBase64String(encbuff,0 , encbuff.Length); 


      var imageEntity = new catalogProductImageFileEntity(); 
      imageEntity.content = enc; 
      imageEntity.mime = "image/jpeg"; 
      imageStream.Close(); 


      var entityP = new catalogProductAttributeMediaCreateEntity(); 
      entityP.file = imageEntity; 
      entityP.types = new[] {"image", "small_image", "thumbnail"}; 
      entityP.position = "0"; 
      entityP.exclude = "0"; 

      _m.catalogProductAttributeMediaCreate(MageSessionProvider.GetSession(), SKU, entityP, "default"); 
      Console.WriteLine("Image Uploaded"); 
     } 
+0

+1效果很好。只有一個問題,當我有多個圖像,並且有一個foreach循環包裹整個代碼時,它會上傳正確的數字,但圖像總是隻有一個圖像。每次刺激循環後,我是否需要處置MemoryStream?謝謝! – 2012-02-07 15:36:31

2

看來,丹和我在同一個問題一直弄不明白在同一天內完成, 我們得到相同的解決方案!

我正在使用XML-RPC和Magento API。我將這段代碼編寫爲一個更大類的一部分,它從文件中讀取圖像數據並使其與Magento API兼容。

internal void readFromFile(string fullImpgPath) 
    { 
     m_file.content = System.Convert.ToBase64String(System.IO.File.ReadAllBytes(fullImpgPath)); 
     string ext = System.IO.Path.GetExtension(fullImpgPath).ToLower(); 
     switch (ext) 
     { 
      case ".gif": 
       m_file.mime = "image/gif"; 
       break; 

      case ".jpg": 
      case ".jpeg": 
       m_file.mime = "image/jpeg"; 
       break; 

      case ".png": 
       m_file.mime = "image/png"; 
       break; 

      case ".bmp": 
       m_file.mime = "image/bmp"; 
       break; 

      case ".tif": 
      case ".tiff": 
       m_file.mime = "image/tiff"; 
       break; 

      default: 
       m_file.mime = "application/octet-stream"; 
       break; 
     } 
    } 

很重要的一點是,「內容」必須是字符串類型,並且 必須從字節[]通過系統功能Convert.ToBase64String(...)的呼叫來獲得。

關於MIME圖片的類型,僅支持「gif」,「jpg」和「png」 ,因爲我發現查看Magento API代碼。