Zip file download File type response not working in Sitecore MVC.
Requirement: User can download each file on click download button and download selected files or download all. So selected files or all files must be downloaded as zipped file.
Code:
I created post action result and File return type, which will allow to download zip file.
I am creating memory stream, initiating the Ziparchive Class.
Next putting media files&stream into zip createEnty.
At last converting the Zipstream to bytes array and defining some response headers like content disposition, content type etc..
Please find post action method code below:
public ActionResult BulkDownload(string[] checkboxSelected)
{
string[] fileItemIDs = checkboxSelected.Distinct().ToArray();
using (System.IO.MemoryStream zipStream = new System.IO.MemoryStream())
{
using (ZipArchive zip = new ZipArchive(zipStream, System.IO.Compression.ZipArchiveMode.Update, true))
{
foreach (var fileid in fileItemIDs)
{
try
{
var lgItemID = Sitecore.Context.Database.Items.GetItem(fileid);
Sitecore.Data.Fields.FileField fileField = ((Sitecore.Data.Fields.FileField)lgItemID.Fields["File"]);
var mediaItem = fileField.MediaItem;
var media = MediaManager.GetMedia(mediaItem);
var stream = media.GetStream().Stream;
var extension = mediaItem.Fields["extension"].Value;
if (String.IsNullOrEmpty(extension)) continue;
ZipArchiveEntry zipItem = zip.CreateEntry(mediaItem.Name + "." + extension);
using (Stream entryStream = zipItem.Open())
{
stream.CopyTo(entryStream);
}
}
catch (Exception ex) { }
}
}
byte[] fileBytes = zipStream.ToArray();
System.Net.Mime.ContentDisposition contentDisposition = new System.Net.Mime.ContentDisposition
{
FileName = "Selectedfile.zip",
Inline = false
};
string ContentType = "application/x-zip-compressed";
//string ContentType = System.Net.Mime.MediaTypeNames.Application.Octet;// It also tried following content type: "application/zip","application/x-zip-compressed"
Response.Headers.Add("Content-Disposition", contentDisposition.ToString());
Response.Headers.Add("X-Content-Type-Options", "nosniff");
return File(fileBytes, ContentType);
}
No error no warnings, all looks good but not giving download popup or not downloading file.
Please see the browser response request & response header(from network tab) below:
I am not getting why it is able to download zip file. I think Sitecore may be blocking or browser(client) is not able download it.
Because a normal pdf/any media file download functionality also not working in File result type response in Sitecore mvc.
Is there anything more to configure for zip file or any file download programmatically in Sitecore mvc controller actions?
I welcome your suggestions, Thanks!