通过Magento SOAP API上传图像

我正在尝试使用带有C#的SOAP API将图像上传到Magento站点。

这是我到目前为止,但它没有工作,没有抛出exception或任何东西,但当我去网站上看图像是空白。

我需要做Base64Encode吗? 我只是尝试过这个,因为这个 PHP示例做了类似的事情。 如果我尝试没有,我会收到错误消息“错误请求”的SOAPexception。

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"); 

这花了我DAYS来解决….这是怎么做的

 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"); } 

似乎Dan和我在同一天同样困惑于同一个问题,我们得到了同样的解决方案!

我正在使用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(...)从bytes []获取。

关于图像的MIME类型,我发现在Magento API代码中查看时,只支持“gif”,“jpg”和“png”。