예제 #1
0
        public ActionResult Upload()
        {
            if (Request.Files.Count > 0)
            {
                var file = Request.Files[0];
                if (file != null && file.ContentLength > 0)
                {
                    string fileName = $"{DateTime.Now}.xml";//客户端保存的文件名

                    var             ss         = string.Empty;
                    EnglishFeedFile reviewList = null;

                    var uploadType = RequestHelper.GetStringFromParameters("UploadType");
                    switch (uploadType)
                    {
                    case "qcxml":
                        ss = DealQcXml(file);
                        break;

                    case "feedexcel":
                        ss = DealFeedExcel(file);
                        break;

                    case "feedxml":
                        fileName = $"{file.FileName}_{DateTime.Now}.xls";
                        ss       = DealFeedXml(file);
                        break;

                    case "reviewfeed":
                        reviewList = DealReviewFeed(Request.Files);
                        break;
                    }

                    Response.ContentType = "application/octet-stream";
                    //通知浏览器下载文件而不是打开
                    Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
                    //Response.BinaryWrite(Encoding.UTF8.GetBytes(ss));
                    WriteBigFile(reviewList);
                    Response.Flush();
                    Response.End();
                }
            }
            return(RedirectToAction("GetFileZip"));
        }
예제 #2
0
        private void WriteBigFile(EnglishFeedFile reviewList)
        {
            byte[] fileBuffer = new byte[1024];//每次读取1024字节大小的数据
            if (reviewList != null)
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    GC.Collect();
                    Thread.Sleep(1000);
                    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(ReviewListingsType));
                    serializer.Serialize(stream, reviewList.GetReviewList());

                    long totalLength = stream.Length;
                    stream.Seek(0, SeekOrigin.Begin);
                    while (totalLength > 0 && Response.IsClientConnected)           //持续传输文件
                    {
                        int length = stream.Read(fileBuffer, 0, fileBuffer.Length); //每次读取1024个字节长度的内容
                        Response.OutputStream.Write(fileBuffer, 0, length);         //写入到响应的输出流
                        totalLength = totalLength - length;
                    }
                }
            }
        }
예제 #3
0
        public EnglishFeedFile DealReviewFeed(HttpFileCollectionBase files)
        {
            //byte[] result = null;
            string host = Request.Params["Host"];
            string lang = Request.Params["Lang"];

            var englishFile = new EnglishFeedFile();

            if (files != null && files.Count > 0)
            {
                for (var i = 0; i < files.Count; i++)
                {
                    HttpPostedFileBase file = files[i];
                    if (file != null && file.FileName.Contains("english"))
                    {
                        using (ExcelTemplateHelper <HotelFeedModel> exHelper = new ExcelTemplateHelper <HotelFeedModel>(file, englishFile.FeedXmlProcess))
                        {
                            exHelper.Run();
                        }

                        file.InputStream.Dispose();
                    }
                }

                englishFile.GetReviewList().ListModel =
                    englishFile.GetReviewList().ListModel.OrderBy(l => l.Ctriphotelid).ToList();
                englishFile.SortHotelList = englishFile.GetReviewList().ListModel.Select(l => l.Ctriphotelid).ToArray();

                for (var i = 0; i < files.Count; i++)
                {
                    HttpPostedFileBase file = files[i];

                    if (file != null && file.FileName.Contains("pic"))
                    {
                        var imageFile = new ImageDeco(englishFile, host, lang);
                        using (var imageDeco = new ExcelTemplateHelper <ImageModel>(file, imageFile.FeedXmlProcess))
                        {
                            imageDeco.Run();
                        }
                    }

                    if (file != null && file.FileName.Contains("review"))
                    {
                        var reviewFile = new ReviewDeco(englishFile, host, lang);
                        using (var reviewDeco = new ExcelTemplateHelper <ReviewModel>(file, reviewFile.FeedXmlProcess))
                        {
                            reviewDeco.Run();
                        }
                    }

                    if (file != null && file.FileName.Contains("name"))
                    {
                        var nameFile = new NameDeco(englishFile, host, lang);
                        using (var nameDeco = new ExcelTemplateHelper <NameModel>(file, nameFile.FeedXmlProcess))
                        {
                            nameDeco.Run();
                        }
                    }

                    if (file != null && file.FileName.Contains("DESC"))
                    {
                        var descFile = new DescTxtDeco(englishFile, host, lang);
                        using (var descDeco = new TxtTemplateHelper(file, descFile.FeedXmlProcess))
                        {
                            descDeco.Run();
                        }
                    }

                    file?.InputStream.Dispose();
                }

                englishFile.GetReviewList().ListModel = englishFile.GetReviewList().ListModel.Where(l => l.HasName || l.HasReview).ToList();
                //result = Serializer.SerializeToBytes(englishFile.GetReviewList());
                //result = XmlHelper.XmlSerialize(englishFile.GetReviewList(), Encoding.UTF8);
            }

            return(englishFile);
        }