通过Magento SOAP API上传图像

时间:2009-06-12 17:20:57

标签: c# magento

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

这是我到目前为止所做的,但它不起作用,没有抛出任何异常或任何事情,但当我去网站上看图像是空白时。

我需要做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");

2 个答案:

答案 0 :(得分:14)

这花了我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");
        }

答案 1 :(得分:2)

似乎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类型,仅支持“gif”,“jpg”和“png” 正如我发现在Magento API代码中查找。