public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context) { //TODO maybe need wrapping logic? var value = context.Object; var xmlSerializer = GetCachedSerializer(context.ObjectType); var httpContext = context.HttpContext; var response = httpContext.Response; //Used so we get correct content-length var fileBufferingWriteStream = new FileBufferingWriteStream(); var responseStream = fileBufferingWriteStream; try { await using (var textWriter = context.WriterFactory(responseStream, Encoding.ASCII)) { //Hack because XmlWriter really wants to add encoding="us-ascii" which segfaults skate 3 await textWriter.WriteAsync("<?xml version=\"1.0\"?>"); using var xmlWriter = XmlWriter.Create(textWriter, _writerSettings); Serialize(xmlSerializer, xmlWriter, value); } response.ContentLength = fileBufferingWriteStream.Length; await fileBufferingWriteStream.DrainBufferAsync(response.Body); } finally { await fileBufferingWriteStream.DisposeAsync(); } }
/// <inheritdoc /> public override async Task SerializeToResponse(RequestExecutionContext context) { var fileWriteStream = new FileBufferingWriteStream(); SetStatusAndContent(context, _contentType); try { using var textWriter = new StreamWriter(fileWriteStream); using var xmlWriter = new XmlTextWriter(textWriter); var serializer = GetSerializer(context.Result.GetType()); serializer.Serialize(xmlWriter, context.Result); xmlWriter.Flush(); textWriter.Flush(); await fileWriteStream.DrainBufferAsync(context.HttpContext.Response.Body, context.HttpContext.RequestAborted); } finally { await fileWriteStream.DisposeAsync(); } }
// GET: Error public async Task <ActionResult> GetBarCode39Async(String code) { Response.ContentType = "image/Jpeg"; //response.Buffer = true; //response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); //response.Expires = 0; if (!String.IsNullOrEmpty(code)) { try { using (Bitmap img = code.GetCode39(false)) { img.SetResolution(_dpi, _dpi); using (FileBufferingWriteStream output = new FileBufferingWriteStream()) { img.Save(output, ImageFormat.Jpeg); //output.Seek(0, SeekOrigin.Begin); await output.DrainBufferAsync(Response.Body); } } } catch (Exception ex) { ApplicationLogging.CreateLogger <PublishedController>().LogError(ex, ex.Message); } } //context.Response.CacheControl = "no-cache"; //context.Response.AppendHeader("Pragma", "No-Cache"); return(new EmptyResult()); }
public async Task WriteAsync <T>(Stream stream, T value, CancellationToken cancellationToken = default) { await using (var buffer = new FileBufferingWriteStream()) { jsonSerializer.Serialize(value, buffer, true); await buffer.DrainBufferAsync(stream, cancellationToken); } }
public async Task WriteAsync <T>(Stream stream, T value, CancellationToken cancellationToken = default) { await using (var bufferStream = new FileBufferingWriteStream()) { await documentWriter.WriteAsync(bufferStream, value, cancellationToken); await bufferStream.DrainBufferAsync(stream, cancellationToken); } }
public async Task <ActionResult> GetQRCodeAsync(String text, QRCodeEncoder.ENCODE_MODE?enc, int?scale, int?ver, QRCodeEncoder.ERROR_CORRECTION?ec, float?dpi) { Response.ContentType = "image/Jpeg"; //response.Buffer = true; //response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); //response.Expires = 0; if (!enc.HasValue) { enc = QRCodeEncoder.ENCODE_MODE.BYTE; } if (!scale.HasValue) { scale = 4; } if (!ver.HasValue) { ver = 6; } if (!ec.HasValue) { ec = QRCodeEncoder.ERROR_CORRECTION.L; } if (!dpi.HasValue) { dpi = 600f; } try { using (Bitmap img = text.CreateQRCode(enc.Value, scale.Value, ver.Value, ec.Value)) { img.SetResolution(_dpi, _dpi); using (FileBufferingWriteStream output = new FileBufferingWriteStream()) { img.Save(output, ImageFormat.Jpeg); //output.Seek(0, SeekOrigin.Begin); await output.DrainBufferAsync(Response.Body); } } } catch (Exception ex) { ApplicationLogging.CreateLogger <PublishedController>().LogError(ex, ex.Message); } //context.Response.CacheControl = "no-cache"; //context.Response.AppendHeader("Pragma", "No-Cache"); return(new EmptyResult()); }
public void FileBufferWriteStreamFromAspNetCore() { using var writer = new FileBufferingWriteStream(memoryThreshold: MemoryThreshold); foreach (var chunk in GetChunks()) { writer.Write(chunk.Span); } writer.Flush(); using var ms = new MemoryStream(content.Length); writer.DrainBufferAsync(ms).GetAwaiter().GetResult(); }
public async Task FileBufferWriteStreamFromAspNetCoreAsync() { using var writer = new FileBufferingWriteStream(memoryThreshold: MemoryThreshold); foreach (var chunk in GetChunks()) { await writer.WriteAsync(chunk); } await writer.FlushAsync(); using var ms = new MemoryStream(content.Length); await writer.DrainBufferAsync(ms); }
public async Task DrainBufferAsync_WithContentInDisk_CopiesContentFromMemoryStream() { // Arrange var input = Enumerable.Repeat((byte)0xca, 30).ToArray(); using var bufferingStream = new FileBufferingWriteStream(memoryThreshold: 21, tempFileDirectoryAccessor: () => TempDirectory); bufferingStream.Write(input, 0, input.Length); var memoryStream = new MemoryStream(); // Act await bufferingStream.DrainBufferAsync(memoryStream, default); // Assert Assert.Equal(input, memoryStream.ToArray()); Assert.Equal(0, bufferingStream.Length); }
public async Task DrainBufferAsync_CopiesContentFromMemoryStream() { // Arrange var input = new byte[] { 1, 2, 3, 4, 5 }; using var bufferingStream = new FileBufferingWriteStream(tempFileDirectoryAccessor: () => TempDirectory); bufferingStream.Write(input, 0, input.Length); var memoryStream = new MemoryStream(); // Act await bufferingStream.DrainBufferAsync(memoryStream, default); // Assert Assert.Equal(input, memoryStream.ToArray()); Assert.Equal(0, bufferingStream.Length); }
public async Task <ActionResult> DrawAllowanceAsync(InvoiceQueryViewModel viewModel) { String viewUrl = $"{Startup.Properties["HostDomain"]}{VirtualPathUtility.ToAbsolute("~/Invoice/CanvasPrintAllowance")}{Request.QueryString}"; var converter = new HtmlConverter(); var bytes = converter.FromUrl(viewUrl); Response.ContentType = "image/jpeg"; using (FileBufferingWriteStream output = new FileBufferingWriteStream()) { output.Write(bytes); //output.Seek(0, SeekOrigin.Begin); await output.DrainBufferAsync(Response.Body); } return(new EmptyResult()); }
public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding) { EnsureArg.IsNotNull(context, nameof(context)); EnsureArg.IsNotNull(selectedEncoding, nameof(selectedEncoding)); HttpResponse response = context.HttpContext.Response; await using var fileBufferingWriteStream = new FileBufferingWriteStream(); await using (TextWriter textWriter = context.WriterFactory(fileBufferingWriteStream, selectedEncoding)) { using (var jsonWriter = CreateJsonWriter(textWriter)) { _jsonSerializer.Serialize(jsonWriter, context.Object); await jsonWriter.FlushAsync(); } } response.ContentLength = fileBufferingWriteStream.Length; await fileBufferingWriteStream.DrainBufferAsync(response.Body); }
public async Task <ActionResult> GetResourceAsync(int id, bool?stretch = false) { var item = models.GetTable <Attachment>().Where(a => a.AttachmentID == id).FirstOrDefault(); if (item != null) { if (System.IO.File.Exists(item.StoredPath)) { if (stretch == true) { using (Bitmap img = new Bitmap(item.StoredPath)) { checkOrientation(img); if (img.Width > Startup.Properties.GetValue <int>("ResourceMaxWidth")) { using (Bitmap m = new Bitmap(img, new Size(Startup.Properties.GetValue <int>("ResourceMaxWidth"), img.Height * Startup.Properties.GetValue <int>("ResourceMaxWidth") / img.Width))) { Response.ContentType = "image/jpeg"; using (FileBufferingWriteStream output = new FileBufferingWriteStream()) { m.Save(output, ImageFormat.Jpeg); //output.Seek(0, SeekOrigin.Begin); await output.DrainBufferAsync(Response.Body); } return(new EmptyResult()); } } } } return(new PhysicalFileResult(item.StoredPath, "application/octet-stream")); } } return(new EmptyResult()); }
public virtual async Task ExecuteAsync(ActionContext context, ViewComponentResult result) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (result == null) { throw new ArgumentNullException(nameof(result)); } var response = context.HttpContext.Response; var viewData = result.ViewData; if (viewData == null) { viewData = new ViewDataDictionary(_modelMetadataProvider, context.ModelState); } var tempData = result.TempData; if (tempData == null) { tempData = _tempDataDictionaryFactory.GetTempData(context.HttpContext); } ResponseContentTypeHelper.ResolveContentTypeAndEncoding( result.ContentType, response.ContentType, (ViewExecutor.DefaultContentType, Encoding.UTF8), MediaType.GetEncoding, out var resolvedContentType, out var resolvedContentTypeEncoding); response.ContentType = resolvedContentType; if (result.StatusCode != null) { response.StatusCode = result.StatusCode.Value; } await using var writer = _writerFactory.CreateWriter(response.Body, resolvedContentTypeEncoding); var viewContext = new ViewContext( context, NullView.Instance, viewData, tempData, writer, _htmlHelperOptions); OnExecuting(viewContext); // IViewComponentHelper is stateful, we want to make sure to retrieve it every time we need it. var viewComponentHelper = context.HttpContext.RequestServices.GetRequiredService <IViewComponentHelper>(); (viewComponentHelper as IViewContextAware)?.Contextualize(viewContext); var viewComponentResult = await GetViewComponentResult(viewComponentHelper, _logger, result); if (viewComponentResult is ViewBuffer viewBuffer) { // In the ordinary case, DefaultViewComponentHelper will return an instance of ViewBuffer. We can simply // invoke WriteToAsync on it. await viewBuffer.WriteToAsync(writer, _htmlEncoder); await writer.FlushAsync(); } else { await using var bufferingStream = new FileBufferingWriteStream(); await using (var intermediateWriter = _writerFactory.CreateWriter(bufferingStream, resolvedContentTypeEncoding)) { viewComponentResult.WriteTo(intermediateWriter, _htmlEncoder); } await bufferingStream.DrainBufferAsync(response.Body); } }
public async Task <ActionResult> CaptchaImgAsync(String code) { string captcha = code; Response.ContentType = "image/Png"; using (Bitmap bmp = new Bitmap(120, 30)) { int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; int x3 = 0; int y3 = 0; int intNoiseWidth = 25; int intNoiseHeight = 15; Random rdn = new Random(); using (Graphics g = Graphics.FromImage(bmp)) { //設定字型 using (Font font = new Font("Courier New", 16, FontStyle.Bold)) { //設定圖片背景 g.Clear(Color.CadetBlue); //產生雜點 for (int i = 0; i < 100; i++) { x1 = rdn.Next(0, bmp.Width); y1 = rdn.Next(0, bmp.Height); bmp.SetPixel(x1, y1, Color.DarkGreen); } using (Pen pen = new Pen(Brushes.Gray)) { //產生擾亂弧線 for (int i = 0; i < 15; i++) { x1 = rdn.Next(bmp.Width - intNoiseWidth); y1 = rdn.Next(bmp.Height - intNoiseHeight); x2 = rdn.Next(1, intNoiseWidth); y2 = rdn.Next(1, intNoiseHeight); x3 = rdn.Next(0, 45); y3 = rdn.Next(-270, 270); g.DrawArc(pen, x1, y1, x2, y2, x3, y3); } } //把GenPassword()方法換成你自己的密碼產生器,記得把產生出來的密碼存起來日後才能與user的輸入做比較。 g.DrawString(captcha, font, Brushes.Black, 3, 3); Response.ContentType = "image/Png"; using (FileBufferingWriteStream output = new FileBufferingWriteStream()) { bmp.Save(output, ImageFormat.Png); ////output.Seek(0, SeekOrigin.Begin); await output.DrainBufferAsync(Response.Body); //await output.CopyToAsync(Response.Body); } //context.Response.End(); } } } return(new EmptyResult()); }