Загрузка изображений через API Magento SOAP

Я пытаюсь загрузить изображения на сайт Magento с помощью SOAP API с C#.

Это то, что у меня есть до сих пор, но это не работает, никаких исключений не выбрасывается или что-то еще, но когда я иду и смотрю на сайт, изображение пустое.

Мне нужно сделать Base64Encode? Я попытался это, потому что этой пример PHP делает что-то подобное. Если я попробую это без, я получу исключение SOAP с сообщением об ошибке "плохой запрос".

    FileStream fs = File.OpenRead(@"c:.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 ответов


это заняло у меня несколько дней.... вот как это сделать

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

Кажется, что Дэн и я были озадачены в том же вопросе в те же дни, и мы получаем одно и то же решение!

Я использую XML-RPC и API Magento. Я написал этот код как часть большего класса, который читает данные изображения из файла и делает его совместимым с 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;
        }
    }

очень важно то, что "содержимое" должно иметь тип string и должен быть получен из байтов[] через вызов системной функции Convert.ToBase64String(...).

о МИМ тип изображения, поддерживаются только "gif", " jpg " и " png как я обнаружил, глядя внутри кода Magento API.