public virtual Task <FileUploadOutputDto> CreateAsync(FileUploadInputDto input) { if (input.Bytes.IsNullOrEmpty()) { ThrowValidationException("Bytes can not be null or empty!", "Bytes"); } if (input.Bytes.Length > BloggingWebConsts.FileUploading.MaxFileSize) { throw new UserFriendlyException($"File exceeds the maximum upload size ({BloggingWebConsts.FileUploading.MaxFileSizeAsMegabytes} MB)!"); } if (!ImageFormatHelper.IsValidImage(input.Bytes, FileUploadConsts.AllowedImageUploadFormats)) { throw new UserFriendlyException("Not a valid image format!"); } var uniqueFileName = GenerateUniqueFileName(Path.GetExtension(input.Name)); var filePath = Path.Combine(Options.FileUploadLocalFolder, uniqueFileName); if (!Directory.Exists(Options.FileUploadLocalFolder)) { Directory.CreateDirectory(Options.FileUploadLocalFolder); } File.WriteAllBytes(filePath, input.Bytes); //TODO: Previously was using WriteAllBytesAsync, but it's only in .netcore. return(Task.FromResult(new FileUploadOutputDto { Name = uniqueFileName, WebUrl = "/api/blogging/files/www/" + uniqueFileName })); }
public static void ValidateImage([CanBeNull] this IFormFile file, out byte[] fileBytes) { fileBytes = null; if (file == null) { throw new UserFriendlyException("No file found!"); } if (file.Length <= 0) { throw new UserFriendlyException("File is empty!"); } if (!file.ContentType.Contains("image")) { throw new UserFriendlyException("Not a valid image!"); } using (var stream = file.OpenReadStream()) { fileBytes = stream.GetAllBytes(); } if (!ImageFormatHelper.IsValidImage(fileBytes, BloggingWebConsts.FileUploading.AllowedImageUploadFormats)) { throw new UserFriendlyException("Not a valid image format!"); } if (file.Length > BloggingWebConsts.FileUploading.MaxFileSize) { throw new UserFriendlyException($"File exceeds the maximum upload size ({BloggingWebConsts.FileUploading.MaxFileSizeAsMegabytes} MB)!"); } }
public virtual async Task <FileUploadOutputDto> CreateAsync(FileUploadInputDto input) { if (input.Bytes.IsNullOrEmpty()) { ThrowValidationException("Bytes of file can not be null or empty!", "Bytes"); } if (input.Bytes.Length > BloggingWebConsts.FileUploading.MaxFileSize) { throw new UserFriendlyException($"File exceeds the maximum upload size ({BloggingWebConsts.FileUploading.MaxFileSizeAsMegabytes} MB)!"); } if (!ImageFormatHelper.IsValidImage(input.Bytes, FileUploadConsts.AllowedImageUploadFormats)) { throw new UserFriendlyException("Invalid image format!"); } var uniqueFileName = GenerateUniqueFileName(Path.GetExtension(input.Name)); await BlobContainer.SaveAsync(uniqueFileName, input.Bytes); return(new FileUploadOutputDto { Name = uniqueFileName, WebUrl = "/api/blogging/files/www/" + uniqueFileName }); }
public virtual async Task <FileUploadOutputDto> CreateAsync(FileUploadInputDto input) { if (input.File == null) { ThrowValidationException("Bytes of file can not be null or empty!", nameof(input.File)); } if (input.File.ContentLength > BloggingWebConsts.FileUploading.MaxFileSize) { throw new UserFriendlyException($"File exceeds the maximum upload size ({BloggingWebConsts.FileUploading.MaxFileSizeAsMegabytes} MB)!"); } var position = input.File.GetStream().Position; if (!ImageFormatHelper.IsValidImage(input.File.GetStream(), FileUploadConsts.AllowedImageUploadFormats)) { throw new UserFriendlyException("Invalid image format!"); } // IsValidImage may change the position of the stream if (input.File.GetStream().CanSeek) { input.File.GetStream().Position = position; } var uniqueFileName = GenerateUniqueFileName(Path.GetExtension(input.Name)); await BlobContainer.SaveAsync(uniqueFileName, input.File.GetStream()); return(new FileUploadOutputDto { Name = uniqueFileName, WebUrl = "/api/blogging/files/www/" + uniqueFileName }); }