/// <summary> /// 上传Web文件 /// </summary> /// <param name="productGroupInfoMedia"></param> /// <returns></returns> public ProductGroupInfoMediaEntity UploadWebFile(ProductGroupInfoMediaEntity productGroupInfoMedia, string strCommonSKUNumber) { try { //根据文件路径下载文件到Byte[] WebClient myWebClient = new WebClient(); //WebProxy proxy = new WebProxy("ssproxy", 8080); //proxy.BypassProxyOnLocal = true; //proxy.UseDefaultCredentials = true; //myWebClient.Proxy = proxy; productGroupInfoMedia.ChunckData = myWebClient.DownloadData(productGroupInfoMedia.FileWebPath); productGroupInfoMedia.IsFirstChunck = true; productGroupInfoMedia.IsLastChunck = true; productGroupInfoMedia.FileGuid = Guid.NewGuid(); //上传到临时文件 productGroupInfoMedia = UploadFile(productGroupInfoMedia, strCommonSKUNumber); //保存文件并生成套图 productGroupInfoMedia = SaveFile(productGroupInfoMedia, strCommonSKUNumber); return(productGroupInfoMedia); } catch (Exception ex) { throw new BusinessException(ex.Message); } }
/// <summary> /// 处理sendor portal上传的图片,包括新品创建和图片更新 /// </summary> /// public DefaultDataContract UploadSendorPortalImageList(int ProductRequestSysno, int productGroupSysNo, int comskuSysNo, string comsku, EntityHeader header) { DefaultDataContract returnValue = new DefaultDataContract(); string faults = string.Empty; List <ItemVendorProductRequestFileEntity> imageList = SellerPortalProductDescAndImageDA.GetProductRequestImageList(ProductRequestSysno, "O"); if (imageList.Count <= 0) { return(returnValue); } //取商品图片数 int currentPicNumber = SellerPortalProductDescAndImageDA.GetCommonInfoPicNumber(comskuSysNo) + 1; string photoFolderPathOnServer = ConfigurationManager.AppSettings["PhotoFolderPathOnServer"].Trim(); ProductGroupInfoMediaEntity productgroupinfomediaentity = new ProductGroupInfoMediaEntity(); productgroupinfomediaentity.Header = header; //图片类型 productgroupinfomediaentity.FileType = "I"; foreach (ItemVendorProductRequestFileEntity image in imageList) { //图片路径 productgroupinfomediaentity.FileWebPath = image.Path.ToLower().Contains("http://") ? image.Path : photoFolderPathOnServer + image.Path; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(productgroupinfomediaentity.FileWebPath)); ((HttpWebResponse)request.GetResponse()).Close(); //文件名 if (currentPicNumber == 1) { productgroupinfomediaentity.FileName = comsku + ".jpg"; } else { productgroupinfomediaentity.FileName = comsku + "-" + currentPicNumber.ToString().PadLeft(2, '0') + ".jpg"; } UploadWebFile(productgroupinfomediaentity, comsku); } catch (BusinessException ex) { faults += image.ImageName + "上传失败,失败原因:" + ex.Message; SellerPortalProductDescAndImageBP.WriteLog("\r\n" + DateTime.Now + image.ImageName + "上传失败,失败原因:" + ex.Message + " 处理失败......"); //如果失败,Count + 1 SellerPortalProductDescAndImageDA.SetProductRequestImageCount(image); continue; } //保证图片编号连续性,待改进为直接取最大编号。 currentPicNumber++; //插入图片关联 //imageBp.InsertCommonInfoImage(productGroupSysNo, comskuSysNo, header); //上传成功更新产品图片状态 image.Status = "F"; SellerPortalProductDescAndImageDA.SetProductRequestImageStatus(image); if (!faults.Equals(string.Empty)) { returnValue.Faults = new MessageFaultCollection(); returnValue.Faults.Add(new MessageFault()); returnValue.Faults[0].ErrorDescription = faults; } } return(returnValue); }
/// <summary> /// 文件保存到相对路径,并重命名 /// </summary> /// <param name="productGroupInfoMedia"></param> public ProductGroupInfoMediaEntity SaveFile(ProductGroupInfoMediaEntity productGroupInfoMedia, string commonSKUNumber) { try { string savePath = ""; //读取图片根据GroupSysNo分段存储信息 string fileFix = GetFileFixByType(productGroupInfoMedia.FileType); //读取文件相对存储路径 savePath = GetFileSavePath(fileFix); //临时文件名 string sfileName = productGroupInfoMedia.FileGuid.ToString(); string dfileName = productGroupInfoMedia.FileName; //int fileNameNo = 0; //fileNameNo = ProductImageDA.GetGroupInfoMaxImage(productGroupInfoMedia.ProductGroupSysno,productGroupInfoMedia.FileType, productGroupInfoMedia.Header.CompanyCode); //dfileName = string.Format("NeweggShowPic{0}-{1}{2}", productGroupInfoMedia.ProductGroupSysno.ToString(), fileNameNo.ToString(), fileFix); savePath += GetSubFolderName(dfileName); //创建图片与商品组关联信息以及图片与商品关联信息 ProductGroupInfoImageEntity productImage = new ProductGroupInfoImageEntity(); //productImage.IsShow = "Y"; productImage.ProductGroupSysno = productGroupInfoMedia.ProductGroupSysno; productImage.ResourceUrl = dfileName; productImage.Status = "A"; productImage.Type = productGroupInfoMedia.FileType; productImage.Header = productGroupInfoMedia.Header; //取得文件名中CommonInfoSkuNumber //string commonSKUNumber = ""; //var re = new Regex(@"^([^\._]+)(_(([0-9]+)|(0[1-9]?)))?\..+?$", RegexOptions.IgnoreCase); //var match = re.Match(productGroupInfoMedia.FileName); //if (match.Success) commonSKUNumber = match.Groups[1].Value; SellerPortalProductDescAndImageDA.CreateProductGroupInfoImage(productImage); //创建商品与图片关联信息 SellerPortalProductDescAndImageDA.CreateProductCommonInfoImage(productImage, commonSKUNumber); //配置存储路径 foreach (string localPath in LocalPathList) { string filePath = localPath + savePath.Replace("/", "\\"); //判断文件夹是否存在 if (!Directory.Exists(filePath)) { Directory.CreateDirectory(filePath); } //判断上传的文件是否为图片,如果为图片需要进行套图处理 if (fileFix == ".jpg") { using (Image uploadImage = Image.FromFile(TemporaryPath + sfileName)) { //判断是否为标准图片 if (CheckImagePixels(uploadImage)) { //重命名文件 FileCopy(TemporaryPath + sfileName, dfileName, filePath); } else { //非标准图片需将临时文件压缩为标准图片 SaveFixedImage(uploadImage, 800, 800, filePath, "Original", dfileName, true); } } using (Image uploadImage = Image.FromFile(filePath + dfileName)) { SaveFixedImageCase(uploadImage, filePath, dfileName); } } else { //重命名文件 FileCopy(TemporaryPath + sfileName, dfileName, filePath); } } //删除临时文件 File.Delete(TemporaryPath + sfileName); return(productGroupInfoMedia); } catch (Exception ex) { throw new BusinessException(ex.Message); } }
/// <summary> /// 上传文件 /// </summary> /// <param name="productGroupInfoImage"></param> /// <returns></returns> public ProductGroupInfoMediaEntity UploadFile(ProductGroupInfoMediaEntity productGroupInfoMedia, string commonSKUNumber) { //文件后缀 string fileFix = ""; FileStream fs = null; try { //判断上传文件是否为第一次上传 if (productGroupInfoMedia.IsFirstChunck) { //取得文件名中CommonInfoSkuNumber //string commonSKUNumber = ""; //var re = new Regex(@"^([^\._]+)(_(([0-9]+)|(0[1-9]?)))?\..+?$", RegexOptions.IgnoreCase); //var re = new Regex(@"(\w+[/])+\w{2,5}(-\w{2,5})+(_\w{2,5})*\.jpg", RegexOptions.IgnoreCase); //var match = re.Match(productGroupInfoMedia.FileName); //Check上传文件名是否合法 //if (match.Success) //{ // commonSKUNumber = match.Groups[1].Value; //} //else //{ // throw new BusinessException("上传文件名不合法,请检查上传文件名称。"); //} //根据取得商品组信息 ProductGroupInfoEntity groupInfo = SellerPortalProductDescAndImageDA.GetProductGroupInfoByCommonSku(commonSKUNumber, productGroupInfoMedia.Header.CompanyCode); if (groupInfo == null) { throw new BusinessException("上传文件名不属于任何商品组,请检查上传文件名称。"); } //判断ProductGroupSysno如果大于0,则需要Check文件名是否属于该组 if (productGroupInfoMedia.ProductGroupSysno > 0) { //Check文件名是否属于该组 if (productGroupInfoMedia.ProductGroupSysno != groupInfo.SysNo) { throw new BusinessException("上传文件不属于该组。"); } } productGroupInfoMedia.ProductGroupSysno = groupInfo.SysNo; //如果为第一段文件需要判断文件类型是否合法 fileFix = GetFileFix(productGroupInfoMedia.ChunckData); //合法创建文件,否则抛出异常 if (!fileFix.Equals(GetFileFixByType(productGroupInfoMedia.FileType))) { throw new BusinessException("上传文件类型不合法,请检查上传文件类型。"); } //判断文件夹是否存在 if (!Directory.Exists(TemporaryPath)) { Directory.CreateDirectory(TemporaryPath); } //创建临时文件 fs = File.Create(TemporaryPath + productGroupInfoMedia.FileGuid.ToString()); } else { //读取临时文件 fs = File.Open(TemporaryPath + productGroupInfoMedia.FileGuid.ToString(), FileMode.Append); } //循环将数据流写入临时文件进行保存 foreach (byte chunck in productGroupInfoMedia.ChunckData) { fs.WriteByte(chunck); } fs.Close(); fs.Dispose(); productGroupInfoMedia.ChunckData = null; return(productGroupInfoMedia); } catch (Exception ex) { throw new BusinessException(ex.Message); } finally { if (fs != null) { fs.Close(); fs.Dispose(); } } }