核心代码:
#region 打包下载/// <summary>/// 淘宝数据包下载,生成csv格式。可直接通过淘宝助理上传到淘宝店铺/// </summary>/// <param name="ids">传入的参数产品ID格式:1-2-3-4</param>/// <returns></returns>[HttpGet]public ActionResult GetZip_Products(string ids){//string host = Request.UrlReferrer.Authority;if (String.IsNullOrEmpty(ids)) return null;List<int> idList = ids.Split('-').Select(s => int.Parse(s)).ToList();OperationResult result = ProductService.GetZip_Products(idList);var list = result.AppendData as List<ProductInfo>;string ProName = "";#region 拼接淘宝属性//根据自己需要创建列头DataTable dt = new DataTable();dt.Columns.Add("title");//宝贝名称dt.Columns.Add("cid");//宝贝类目dt.Columns.Add("num");//宝贝数量dt.Columns.Add("cateProps");//宝贝属性dt.Columns.Add("skuProps");//销售属性组合dt.Columns.Add("price");//价格dt.Columns.Add("description");//描述dt.Columns.Add("picture");//图片foreach (var info in list){ProName = info.txtTitle;//获取单条产品信息OperationResult proResult = ProductService.Pro_GetInfo(info.ID);ProductInfo pInfo = proResult.AppendData as ProductInfo;DataRow dr = dt.NewRow();dr["title"] = info.txtTitle;#region 宝贝数量int temp_num = 0;foreach (var item in pInfo.hidStockPropertyList){temp_num += (item.num ?? 0);}dr["num"] = temp_num;#endregion#region 宝贝类目dr["cid"] = ProductService.GetCid_Info((pInfo.hidAttrStencilID ?? 0));#endregion#region 宝贝属性string temp = string.Empty;List<TreeGrid> tg = pInfo.hidAttrStencilTable;foreach (var item in tg){if (item.inputtype.Equals(2)){string Vid = ProductService.GetVid_Info(item.value, item.id);if (!string.IsNullOrEmpty(Vid)){temp += item.pid + ":" + Vid + ";";}}}if (!string.IsNullOrEmpty(temp)){dr["cateProps"] = temp.Substring(0, temp.Length - 1);}else{dr["cateProps"] = "";}#endregion#region 销售属性组合dr["skuProps"] = AttrService.Get_Salesproperty(pInfo.hidStockPropertyList);#endregion#region 宝贝价格dr["price"] = info.txtUnitPrice;#endregion#region 宝贝描述dr["description"] = info.txtContentText;#endregion#region 宝贝图片#region 图片集合string temp_img = string.Empty;int temp_id = 0;foreach (var itemimg in info.hidImgList){//"2014102916324489933916.jpg"string imgurl = itemimg.LFilePath.Substring(itemimg.LFilePath.LastIndexOf("/") + 1).Split('.')[0];temp_img += imgurl + ":1:" + temp_id + ":|;";temp_id++;}#endregiondr["picture"] = temp_img;#endregion//dr["picture"] = string.Join("|", info.hidImgList.Select(s => s.LFilePath.Substring(s.LFilePath.LastIndexOf("/") + 1)));dt.Rows.Add(dr);}#endregionif (list != null){#region 保存路径设置//路径可自己进行设置,我这里直接取的配置文件里面的路径//读取配置文件中的信息var config = WebConfigs.GetConfig();string newGuidFile = Guid.NewGuid().ToString();String _SavePath = config.SavePath;String _Folder = CommonEnum.ProductImg_Remote;if (!_Folder.EndsWith("/")) _Folder += "/";String _FolderGzip = CommonEnum.ProductImg_LocalGzip;if (!_FolderGzip.EndsWith("/")) _FolderGzip += "/";String _SavePathRemote = _SavePath + _Folder;String _SavePathLocalGzip = _SavePath + _Folder + newGuidFile + "/";//创建相关文件夹Utils.CreateDir(Server.MapPath(_SavePathRemote));Utils.CreateDir(Server.MapPath(_SavePathLocalGzip));Utils.CreateDir(Server.MapPath(_SavePathLocalGzip + "/" + ProName + "/"));int rowIndex = 3;#endregionforeach (var Item in list){#region MyRegionstring itemPath = _SavePathLocalGzip + "/" + ProName + "/";foreach (var imgItem in Item.hidImgList){GetContent(imgItem.LFilePath, newGuidFile, _SavePath, itemPath);}rowIndex++;#endregion}String execlPath = _SavePathLocalGzip + ProName + ".csv";FileStream fs = new FileStream(Server.MapPath(execlPath), System.IO.FileMode.Create, System.IO.FileAccess.Write);StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312"));string data = "version 1.00";sw.WriteLine(data);data = "";//写出列名称for (int i = 0; i < dt.Columns.Count; i++){data += dt.Columns[i].ColumnName.ToString();if (i < dt.Columns.Count - 1){data += ",";}}sw.WriteLine(data);sw.WriteLine("宝贝名称,宝贝类目,宝贝数量,宝贝属性,销售属性组合,宝贝价格,宝贝描述,新图片");//写出各行数据for (int i = 0; i < dt.Rows.Count; i++){data = "";for (int j = 0; j < dt.Columns.Count; j++){string str = dt.Rows[i][j].ToString();str = str.Replace("\"", "\"\"");//替换英文冒号 英文冒号需要换成两个冒号if (str.Contains(',') || str.Contains('"')|| str.Contains('\r') || str.Contains('\n')) //含逗号 冒号 换行符的需要放到引号中{str = string.Format("\"{0}\"", str);}data += str;if (j < dt.Columns.Count - 1){data += ",";}}sw.WriteLine(data);}sw.Close();fs.Close();string ZipFile = Server.MapPath(_SavePathRemote + newGuidFile + ".zip");//压缩 CompressionHelper.CreateZip(Server.MapPath(_SavePathLocalGzip), ZipFile);return File(ZipFile, "application/zip", newGuidFile + ".zip");}return null;}/// <summary>/// 将DataTable中数据写入到CSV文件中/// </summary>/// <param name="dt">提供保存数据的DataTable</param>/// <param name="fileName">CSV的文件路径</param>public static void SaveCSV(DataTable dt, string fullPath){FileInfo fi = new FileInfo(fullPath);if (!fi.Directory.Exists){fi.Directory.Create();}FileStream fs = new FileStream(fullPath, System.IO.FileMode.Create, System.IO.FileAccess.Write);//StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);string data = "";//写出列名称for (int i = 0; i < dt.Columns.Count; i++){data += dt.Columns[i].ColumnName.ToString();if (i < dt.Columns.Count - 1){data += ",";}}sw.WriteLine(data);//写出各行数据for (int i = 0; i < dt.Rows.Count; i++){data = "";for (int j = 0; j < dt.Columns.Count; j++){string str = dt.Rows[i][j].ToString();str = str.Replace("\"", "\"\"");//替换英文冒号 英文冒号需要换成两个冒号if (str.Contains(',') || str.Contains('"')|| str.Contains('\r') || str.Contains('\n')) //含逗号 冒号 换行符的需要放到引号中{str = string.Format("\"{0}\"", str);}data += str;if (j < dt.Columns.Count - 1){data += ",";}}sw.WriteLine(data);}sw.Close();fs.Close();}#endregion
调用到的方法:#region 处理远程图片及移动文件到指定目录private bool GetContent(string ContentText, string newGuidFile, string _SavePath, string _SavePathLocalGzip){if (string.IsNullOrEmpty(ContentText)) return false;MatchCollection mc = Regex.Matches(ContentText, "http://.[^'|\\s|\"]*\\.(jpg|gif|png|bmp|jpeg|JPG|GIF|PNG|BMP|JPEG)");if (mc != null && mc.Count > 0){foreach (Match Item in mc){if (string.IsNullOrEmpty(Item.Value) || Item.Value.Length < 4) continue;String fileExt = Item.Value.Substring(Item.Value.LastIndexOf('.'));String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;//生成新路径String filePath = _SavePath + newFileName;String filePathLocal = _SavePathLocalGzip + newFileName;while (System.IO.File.Exists(Server.MapPath(filePath))){newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt;filePath = _SavePath + newFileName;filePathLocal = _SavePathLocalGzip + newFileName;}bool IsSave = SaveRemoteImg(Item.Value, Server.MapPath(filePath));if (IsSave && System.IO.File.Exists(Server.MapPath(filePath))){System.IO.File.Copy(Server.MapPath(filePath), Server.MapPath(filePathLocal));return true;}return false;}}else{String fileName = ContentText.Substring(ContentText.LastIndexOf("/") + 1);String filePathLocal = _SavePathLocalGzip + fileName;if (System.IO.File.Exists(Server.MapPath(ContentText))){string s = ".tbi";StringBuilder strF = new StringBuilder();strF.Append(fileName.Substring(fileName.LastIndexOf("/") + 1).Split('.')[0]).Append(s);System.IO.File.Copy(Server.MapPath(ContentText), Server.MapPath(_SavePathLocalGzip + strF));}return true;}return false;}/// 保存远程图片/// </summary>/// <param name="filePath">远程图片路径</param>/// <param name="SavePath">服务器端保存路径</param>/// <returns></returns>private bool SaveRemoteImg(string filePath, string SavePath){System.Drawing.Image image = null;try{System.Net.HttpWebRequest webrequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(filePath);System.Net.HttpWebResponse webresponse = (System.Net.HttpWebResponse)webrequest.GetResponse();if (webresponse.StatusCode == System.Net.HttpStatusCode.OK){image = System.Drawing.Image.FromStream(webresponse.GetResponseStream());//保存在服务器的本地硬盘image.Save(SavePath);return true;}return false;}catch (Exception ex){LogHelper.WriteErrorLog("远程图片保存失败", ex);return false;}finally{if (image != null){image.Dispose(); //释放资源}}}

生成文件的最后效果图:

<img src="https://img-blog.csdn.net/20150917110008362?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="https://img-blog.csdn.net/20150917110056200?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

C# 淘宝数据包下载,生成csv格式。可直接通过淘宝助理上传到淘宝店铺相关推荐

  1. 第三方平台生成的CSV,如何导入上传到淘宝店铺

    问题1:"我的需求是这样的,我是第三方平台,客户在我平台设计了商品,然后下载数据生成了CSV文件,再由CSV文件导入上传到淘宝" "我用的*手工具箱去抓取的拼多多商品,然 ...

  2. 手把手教你实现商品数据包的生成和下载功能开发

    提示:实战项目功能的实现 文章目录 前言 一.商品数据包是什么? 二.实现步骤 1.Route设置 2.数据包的生成开发 总结 前言 提示:有问题请在评论区留言,谢谢: 最近在做电商平台,刚好要实现商 ...

  3. 将淘宝数据包导入到自己的商城系统

    淘宝网有一个淘宝助理,可以方便的将淘宝店的商品资源导出成csv格式的数据包.很多商城系统为了能快速输入商品,都会要求开发者能最大限度的利用淘宝数据包直接导入产品数据.最近正好有这样一个需求,就研究了一 ...

  4. ECshop导入淘宝数据包乱码问题解决方法

    ECshop在导入淘宝数据包的时候出现数据乱码. 测试版本 ecshop2.73 利用淘宝助手导出一个数据包(.csv),不要一次全部商品导出,最好是将数据包控制在1M左右,因为ecshop对上传文件 ...

  5. 将淘宝数据包导入自己的商城系统

    淘宝网有一个淘宝助理,可以方便的将淘宝店的商品资源导出成csv格式的数据包.很多商城系统为了能快速输入商品,都会要求开发者能最大限度的利用淘宝数据包直接导入产品数据. 当然,数据包的产品字段与商城的产 ...

  6. 用ECSHOP增强工具把淘宝数据包批量上传到自己的ECSHOP独立网店

    www.shopfw.net 用ECSHOP增强工具把淘宝数据包批量上传到自己的ECSHOP独立网店.完整保留商品的颜色.尺码.库存.货号.重量.首页图.详情图.商品描述.扩展属性等信息.对于网店中缺 ...

  7. 用SHOPEX增强工具把淘宝数据包批量上传到自己的ShopEX独立网店

    用SHOPEX增强工具把淘宝数据包批量上传到自己的ShopEX独立网店.完整保留商品的颜色.尺码.库存.货号.重量.首页图.详情图.商品描述.扩展属性等信息.对于网店中缺少的规格,软件会自动添加,无需 ...

  8. python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...

    本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...

  9. 【csv文件转xml文件】Excel表格数据快速批量生成xml格式文件

    使用背景: 使用场景举例:数据集标签处理 有时候我们需要将固定格式的Excel表格文件(csv文件)转换为xml文件使用,例如我们在目标检测实验当中我们需要制作数据集Pascal VOC格式的标签文件 ...

最新文章

  1. catia如何测量毛料尺寸_浅谈线束尺寸测量基准点的定义
  2. C++11系列学习之三----array/valarray
  3. Linux常用运维命令笔记
  4. 精简jdk包_具有JDK 12精简数字格式的自定义精简数字模式
  5. 携程去哪儿移动端产品分析报告
  6. 访问一下互联网中的IPV6主机
  7. bigdecimal乘法_Java面试题之BigDecimal比较大小问题
  8. 协议 UDP、TCP UDP的接发数据的步骤
  9. scala中class,object,trait的区别
  10. mysql ansi导入_mysql导入csv的4种报错的解决方法
  11. C程序设计--指针(用 “ 函数 ” 对 “ 多维数组 ” 进行操作)
  12. 超详细 CSS动画-animation
  13. 单片机原理与应用复习
  14. sis新地址_“这是什么梗?”,互联网上的新梗老梗如何影响你?
  15. python解析sql字段血缘_SQL血缘关系分析
  16. 用Windows自带的画图软件拼接(合成)多张图片
  17. 餐饮服务设备行业的互联网趋势
  18. ZYNQ TTC使用方法
  19. std::bitset使用
  20. 如何求水平渐近线(例题讲解)

热门文章

  1. pytorch FX模型静态量化
  2. 手机user agent大全下载 整理发布一批移动设备的user agent【分享】
  3. C++知识黄金学习记录
  4. Java经典好书推荐-从入门到进阶
  5. 【每日早报】2019/11/26
  6. 煎饼,娇妻,Belief:黄太吉的移动互联网营销
  7. 10部男生必看经典电影
  8. 推荐系统 --- 推荐算法 --- 基于知识的推荐算法
  9. 【题解】bzoj-1415 NOI-2005 聪聪与可可
  10. 桌面应用程序如何迁移至.NET Core / .NET 5?