2009-06-12 74 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代码。