2

I have been able to download a zipfile before but then the compression happend on the ASP server. Now we have changed this action to another server (Progress).

At this moment I'm receiving a base64 encoded string which represents a zip file. But how can I convert this string to a zipfile. The code I used before you can find beneath, can I reuse code?

MemoryStream outputStream = new MemoryStream();
outputStream.Seek(0, SeekOrigin.Begin);

using (ZipFile zip = new ZipFile())
{
   foreach (string id in idArray)
   {
        string json = rest.getDocumentInvoice(Convert.ToInt32(id));
        byte[] file = json.convertJsonToFile();
        zip.AddEntry("invoice" + id + ".pdf", file);
   }
    zip.Save(outputStream);
}


outputStream.WriteTo(Response.OutputStream);
Response.AppendHeader("content-disposition", "attachment; filename=invoices.zip");
Response.ContentType = "application/zip";
return new FileStreamResult(outputStream, "application/zip");

I have no idea how to convert a string to a zip file. Thanks in advance for your help

tereško
  • 56,151
  • 24
  • 92
  • 147
thomvlau
  • 532
  • 3
  • 8
  • 24

3 Answers3

3

Convert the base64 to a byte array by doing:

Convert.fromBase64String(strBase64);

Then I found an article to easily download the zipfile

Download file of any type in Asp.Net MVC using FileResult?

This article suggests:

public FileResult Download()
{
    string base64 = getBase64ZIP();
    byte[] byteArray = Convert.fromBase64String(base64);
    return File(byteArray, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
Community
  • 1
  • 1
thomvlau
  • 532
  • 3
  • 8
  • 24
0

Use Convert.FromBase64String to get the bytes of the zip file.

string base64String = rest.getDocumentInvoice(Convert.ToInt32(id));
byte[] file = Convert.FromBase64String(base64String);
using(var stream = new MemoryStream(file))
{
    zip.AddEntry("invoice" + id + ".pdf", stream);
}
Dustin Kingen
  • 19,074
  • 6
  • 47
  • 90
0

Try this:

HTML:

>  <a id='dwnldLnk' download='myzip.zip' style="display:none;" /> 
    >     <a ng-click="saveFile()">myzip.zip</a>

Controller:

var dataBase64 = "UEsDBAoAAAAAAORSo04AAAAAAAAAAAAAAAAEABwAc3VtL1VUCQADG7TLXKu/y1x1eAsAAQToAwAABOgDAABQSwMEFAAAAAgAe3WTTkQjafoxAAAAMgAAAAoAHABzdW0vc3VtLmdvVVQJAAM6fLlcha3LXHV4CwABBOgDAAAE6AMAACtITM5OTE9VKC7N5eJKK81LVgguzS3WSNRJUsjMK9EEEdVcnEWpJaVFeQqJ2klctQBQSwMEFAAAAAgAtkqWTksgx3NnAgAAPgQAAAcAHABtYWluLmdvVVQJAAM4Jb1cha3LXHV4CwABBOgDAAAE6AMAAHVTX0/bMBB/Jp/i5KeUlWTjkYmHDKiIxtKJlCGEeHCTS2qR2JntECrEd99dmm6VJvJi2b77/TsnPg7gGG5UgdphCd6A3yAknSxoyU3lB2kRFqbXpfTKaAiTfDED2qIFoxGMhdZYZJTCaG/Vuvd01uwQQdYWsUXtXQSQI47w2XKVXlxBpRqEUrldE7EPym8YyG+Ug8HYZ6gISpalYmrZgNJ00O6EWKylLZWuibfbWlVvPJhBo3Ub1UUMs2In+WKvxe1wR1by+WD6ycaB4ymIOfwiHGY5jT4zVMg1YroVs6+wpe5WbkEbD73DA2h8LbDzJJV0tV2jpC7wwNlfDsrjYQIxay+pXo5OwFSHZSA9NXIvfxvvu7M4HoYhkqPiyNg63huMbyjWLL862anmpjvdoHMU1u9eWYp4vQXZkapCrklrIwce4DikcfikYrCUtq7n4KbpM8zhlP6FtpdI1g8LKDapQSQ5pLmAb0me5nMGuU9X18u7Fdwnt7dJtkqvcljewsUyu0xX6TKj3QKS7AG+p9nlHJAiIx587Sw7IJmK48RynO3+Ke0l8EPhveuwUJUqyJque1kj1OYFreZ30qFtleOxOhJYMkyjWuXH9+T+98VEcRBQzs8M1NKMgoBEGOshDI6E61tBS9V6Xsg//QAvIpgFQRzDD54oqRrk+EYp22tsGhNUvS7Gy1Da2hFo98jJ6fpJaY+2kgW+vc8+OIe34Ijoop904RsdCgYSs+CIIoKzc+p6xvADyLHoUdSGkzlhMyeTM/EE5yBGeXMQ8AkmK1HqjQzJZZT3rQu/zE9nI4rvLf9+Lnj/A1BLAQIeAwoAAAAAAORSo04AAAAAAAAAAAAAAAAEABgAAAAAAAAAEAD/QQAAAABzdW0vVVQFAAMbtMtcdXgLAAEE6AMAAAToAwAAUEsBAh4DFAAAAAgAe3WTTkQjafoxAAAAMgAAAAoAGAAAAAAAAQAAAP+BPgAAAHN1bS9zdW0uZ29VVAUAAzp8uVx1eAsAAQToAwAABOgDAABQSwECHgMUAAAACAC2SpZOSyDHc2cCAAA+BAAABwAYAAAAAAABAAAA/4GzAAAAbWFpbi5nb1VUBQADOCW9XHV4CwABBOgDAAAE6AMAAFBLBQYAAAAAAwADAOcAAABbAwAAAAA="
var dataFile = 'data:application/zip;base64,' + dataBase64 
  var dlnk = document.getElementById('dwnldLnk');
  dlnk.href = dataFile;
  dlnk.click();