Загрузка изображений через 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.