Загрузка нескольких документов в формате zip (вызов Ajax) не работает - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь загрузить несколько документов, извлеченных из WCF (C #), и передать их через data.Stream. Видимо работает, но я не могу открыть загруженный zip, кто-нибудь может мне помочь, пожалуйста?

   downloadSelectedItems: function () {
                var selectedDocumentsUrl = [];
                for (var i = 0; i < datatableResult.selected.length; i++) {
                    selectedDocumentsUrl.push(datatableResult.selected[i]["relativeUrlToDocument"]);
                }
                var digest = $('#__REQUESTDIGEST').val();
                $.ajax({
                    type: "POST",
                    url: _spPageContextInfo.webAbsoluteUrl + "/_vti_bin/Infratel.Documentale/_wcf/Documentale.svc/DownloadDocuments",
                    headers: {
                        'Content-Type': 'application/json',
                        "X-RequestDigest": digest
                    },
                    data: JSON.stringify({
                        "selectedDocumentsUrl": selectedDocumentsUrl
                    }),        
                    contentType: 'application/zip',
                    dataType: 'json',
                    responseType: 'arraybuffer'
                }).done(function (data, textStatus, jqXHR) {
                var blob = new Blob([JSON.stringify(data.Stream, null, 2)], { type: 'application/zip' });
                var link = document.createElement('a');
                var url = window.URL || window.webkitURL;
                link.href = url.createObjectURL(blob);
                link.download = "ArchiveZip";
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
            });                    
        }

 public Result DownloadDocuments(DataContract data)
        {
            Result result = new Result { Outcome = OutComeType.KO };

                using (SPSite site = new SPSite(SPContext.Current.Site.Url))
                {
                    var rootWeb = site.RootWeb;
                    using (MemoryStream stream = new MemoryStream())
                    {
                        using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
                        {
                            foreach (var fileUrl in data.selectedDocumentsUrl)
                            {
                                var item = rootWeb.GetListItem(fileUrl);
                                var demoFile = archive.CreateEntry(item.File.Name);

                                using (var entryStream = demoFile.Open())
                                {
                                    item.File.OpenBinaryStream().CopyTo(entryStream);
                                }
                            }
                            //string filename = DateTime.Now.ToFileTime().ToString() + ".zip";
                            //HttpContext.Current.Response.Clear();
                            //HttpContext.Current.Response.ClearHeaders();
                            //HttpContext.Current.Response.ClearContent();
                            //HttpContext.Current.Response.AddHeader("Content-Length", stream.Length.ToString());
                            //HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
                            //HttpContext.Current.Response.ContentType = "application/zip";                       
                            //HttpContext.Current.Response.End();

                            //HttpContext.Current.Response.TransmitFile(filename);
                            //byte[] buffer = new byte[65536];
                            //stream.Position = 0;
                            //int num;
                            //do
                            //{
                            //    num = stream.Read(buffer, 0, buffer.Length);
                            //    HttpContext.Current.Response.OutputStream.Write(buffer, 0, num);
                            //}

                            //while (num > 0);
                            //HttpContext.Current.Response.Flush();
                            stream.Position = 0;
                            result.Stream = stream;
                        }           
                    }

                }
                result.Outcome = OutComeType.OK;

            return result;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...