Загрузка изображений через Magento SOAP API - PullRequest
7 голосов
/ 12 июня 2009

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

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

Нужно ли использовать 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");

Ответы [ 2 ]

14 голосов
/ 15 июня 2009

Это заняло у меня ДНИ, чтобы выработать .... это, как это сделать

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");
        }
2 голосов
/ 19 июня 2009

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

Я использую 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;
        }
    }

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...