//[ValidateAntiForgeryToken] public async Task <JsonResult> Upload([FromRoute] string id = null, [FromQuery] bool overwrite = false) { Request.EnableRewind(); var files = new List <string>(); var model = new MultipartModel(); var result = false; if (!string.IsNullOrWhiteSpace(id) && Request.ContentLength > 0) { var hash = Guid.Parse(id); using (var dbContext = Database.For <ThePalaceEntities>()) { if (dbContext.Sessions.Any(s => s.Hash == hash && s.UntilDate > DateTime.UtcNow)) { var path = Path.Combine(Environment.CurrentDirectory, "wwwroot", "Media"); if (Directory.Exists(path)) { result = true; Request.Body.GetFiles(model); foreach (var file in model.files) { var fileName = Path.GetFileName(file.Filename).ToLower(); var filePath = Path.Combine(path, fileName); if (overwrite || !System.IO.File.Exists(filePath)) { files.Add(fileName); try { using (var stream = new FileStream(filePath, FileMode.Create)) { await stream.WriteAsync(file.FileContents); } } catch (Exception ex) { ex.Log(); result = false; } } } } } } } return(Json(new { success = result, files = files, })); }
public static bool GetFiles(this Stream stream, MultipartModel model) { var result = false; var data = ToByteArray(stream); var content = data.GetString(); var delimiterEndIndex = content.IndexOf("\r\n"); if (delimiterEndIndex > -1) { var delimiter = content.Substring(0, delimiterEndIndex); var delimiterBytes = ("\r\n" + delimiter).GetBytes(); var regexFileName = new Regex(@"(?<=filename\=\"")(.*?)(?=\"")"); var regexContentType = new Regex(@"(?<=Content\-Type:)(.*?)(?=\r\n\r\n)"); model.files = new List <MultipartFile>(); for (var endIndex = 0; endIndex < data.Length;) { try { var filenameMatch = regexFileName.Match(content, endIndex); var contentTypeMatch = regexContentType.Match(content, endIndex); if (contentTypeMatch.Success && filenameMatch.Success) { var startIndex = contentTypeMatch.Index + contentTypeMatch.Length + "\r\n\r\n".Length; endIndex = IndexOf(data, delimiterBytes, startIndex); var contentLength = endIndex - startIndex; if (contentLength > 0) { var fileData = new byte[contentLength]; var file = new MultipartFile(); file.ContentType = contentTypeMatch.Value.Trim(); file.Filename = filenameMatch.Value.Trim(); Buffer.BlockCopy(data, startIndex, fileData, 0, contentLength); file.FileContents = fileData; model.files.Add(file); } else { break; } } else { break; } } catch (Exception ex) { ex.DebugLog(); break; } } result = true; } return(result); }