Created
July 24, 2017 21:06
-
-
Save dermatologist/5f3900074e7383befe5363331de238e6 to your computer and use it in GitHub Desktop.
ASP.Net Core Upload Multiple Files , Zip and Save as a byte array in database
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
how do I use it in my scenario
//My Model Register.cs
public byte[] UploadImg { get; set; }
//Context class
public DbSet register { get; set; }
//my controller
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using SPA_App.Models;
using System.Globalization;
using Microsoft.AspNetCore.Http;
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
namespace SPA_App.Controllers
{
public class RegistersController : Controller
{
private readonly StudentContext _context;
}