7

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

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

我需要做 Base64Encode 吗?我只是真正尝试过这个,因为这个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");
4

2 回答 2

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");
        }
于 2009-06-15T13:52:04.993 回答
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;
        }
    }

非常重要的是,“内容”必须是字符串类型,并且必须通过调用系统函数从bytes[]中获取Convert.ToBase64String(...)

关于图像的MIME类型,仅支持“gif”、“jpg”和“png”,因为我发现查看 Magento API 代码。

于 2009-06-19T06:52:29.233 回答