我正在尝试使用带有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");
答案 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代码中查找。