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

核心代码:
#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++;
                }
                #endregion
                dr["picture"] = temp_img;
                #endregion

                //dr["picture"] = string.Join("|", info.hidImgList.Select(s => s.LFilePath.Substring(s.LFilePath.LastIndexOf("/") + 1)));
                dt.Rows.Add(dr);
            }

            #endregion

            if (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;
                #endregion

                foreach (var Item in list)
                {
                    #region MyRegion
                    string 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="" />


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值