Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
ASP.Net Core Upload Multiple Files , Zip and Save as a byte array in database
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using System.IO;
using System.IO.Compression;
namespace MyNameSpace
{
public static class FileUpload
{
public static byte[] ToZip(List<IFormFile> files)
{
long size = files.Sum(f => f.Length);
// full path to file in temp location: var filePath = Path.GetTempFileName();
var tempPath = Path.GetTempPath();
var filePath = tempPath + "/submission/";
var archiveFile = tempPath + "/zip/archive.zip";
var archivePath = tempPath + "/zip/";
if (Directory.Exists(filePath))
{
Directory.Delete(filePath, true);
}
if (Directory.Exists(archivePath))
{
Directory.Delete(archivePath, true);
}
Directory.CreateDirectory(filePath);
Directory.CreateDirectory(archivePath);
foreach (var formFile in files)
{
var fileName = filePath + formFile.FileName;
if (formFile.Length > 0)
{
using (var stream = new FileStream(fileName, FileMode.Create))
{
formFile.CopyToAsync(stream);
}
}
}
ZipFile.CreateFromDirectory(filePath, archiveFile);
/* beapen: 2017/07/24
*
* Currently A Filestream cannot be directly converted to a byte array.
* Hence it is copied to a memory stream before serializing it.
* This may change in the future and may require refactoring.
*
*/
var stream2 = new FileStream(archiveFile, FileMode.Open);
var memoryStream = new MemoryStream();
stream2.CopyTo(memoryStream);
using (memoryStream)
{
return memoryStream.ToArray();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment