加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 服务txt的asp.net mvc被截断

发布时间:2020-12-16 09:31:16 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试使用操作提供由数据库创建的txt文件.行动如下: public ActionResult ATxt(){ var articulos = _articulosService.ObteTotsArticles(); return File(CatalegATxt.ATxt(articulos),"text/plain");} 和CatalegATxt类是: using System;using System.
我正在尝试使用操作提供由数据库创建的txt文件.行动如下:

public ActionResult ATxt()
{
    var articulos = _articulosService.ObteTotsArticles();
    return File(CatalegATxt.ATxt(articulos),"text/plain");
}

和CatalegATxt类是:

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using WebDibaelsaMVC.DTOs.Busqueda;

namespace WebDibaelsaMVC.TxtLib
{
    public static class CatalegATxt
    {
         public static Stream ATxt(IEnumerable<ArticuloBusquedaDTO> articles)
         {
            var stream = new MemoryStream();
            var streamWriter = new StreamWriter(stream,Encoding.UTF8);
            foreach (ArticuloBusquedaDTO article in articles)
            {
                streamWriter.WriteLine(article.ToStringFix());
            }
            stream.Seek(0,SeekOrigin.Begin);
            return stream;
        }

        public static string ToStringFix(this ArticuloBusquedaDTO article)
        {
            string result = "";
            result += article.CodigoArticulo.PadRight(10,' ').Substring(0,10);
            result += article.EAN.Trim().PadLeft(13,'0').Substring(0,13);
            result += article.NombreArticulo.PadRight(100,100);
            result += article.Marca.PadRight(100,100);
            result += article.Familia.PadRight(50,50);
            result += article.PrecioCesion.ToStringFix();
            result += article.PVP.ToStringFix();
            return result;
        }

        private static string ToStringFix(this double numero)
        {
            var num = (int)Math.Round(numero * 100,0);
            string result = num.ToString().PadLeft(10,'0');
            return result;
        }
    }
}

它只根据我从数据库中获取的东西写入文件行.但是当我查看文件时,它看起来被截断了.该文件大约是8Mb.我也尝试在从ATxt返回之前转换为byte [],结果相同.

任何的想法?

谢谢,

普约尔

更新:我还试图从相同的内容提供XML,它也被截断.它不会被截断数据(我认为它可能是一个EOF字符),但它在标签的中间被截断…

解决方法

我遇到了完全相同的问题.文本文件将始终作为截断返回.

我突然想到它可能是一个“潮红”的问题,事实确实如此.编写器的缓冲区在操作结束时没有被刷新 – 因为没有使用块或者Close()调用 – 它会自动刷新.

你需要打电话:

streamWriter.Flush();

在MVC接管流之前.

这是你的方法应该是这样的:

public static Stream ATxt(IEnumerable<ArticuloBusquedaDTO> articles)
 {
    var stream = new MemoryStream();
    var streamWriter = new StreamWriter(stream,Encoding.UTF8);
    foreach (ArticuloBusquedaDTO article in articles)
    {
        streamWriter.WriteLine(article.ToStringFix());
    }
    // Flush the stream writer buffer
    streamWriter.Flush();
    stream.Seek(0,SeekOrigin.Begin);
    return stream;
}

希望这可以帮助!

米罗斯拉夫

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读