内存字符串直接到文件显示在html中

本文关键字:显示 html 文件 字符串 内存 | 更新日期: 2023-09-27 17:49:51

是否可以将内存流发送到html,如文件?

这个想法不是在硬盘上创建一个文件。

我已经创建了流,我可以下载文件没有问题,问题是传递到变量发送到aspx页面,所以我可以使用它来显示特定div上的文件。

有可能吗?

致以最诚挚的问候和感谢

这是我的代码:

        public string ExportMemoryPdf(DataTable dtpdf, String Path)
    {
        string User = System.Web.HttpContext.Current.User.Identity.Name.ToString();
        string Date = DateTime.Now.ToString();
        string Year = DateTime.Now.ToString("yyyy");
        string Month = DateTime.Now.ToString("MM");
        string Day = DateTime.Now.ToString("dd");
        string Hour = DateTime.Now.ToString("hh");
        string Minutes = DateTime.Now.ToString("mm");
        string Seconds = DateTime.Now.ToString("ss");
        string FileName = User + Day + Month + Year + Hour + Minutes + Seconds;

        //Session["WhereIsIt"].ToString()
        //-----------------------Chamada de Classe de Registo de Eventos--------------------------
        //string Message = "The User Asked For a PDF File From the Table" + Request.QueryString["Position"] + "With the Filename: " + FileName;
        string Message = "The User Asked For a PDF File From the Table With the Filename: " + FileName;
        //OneGrid.ExportSettings.IgnorePaging = true;
        //OneGrid.Rebind();
        //RegisterFile.AddRegistry(User, Message, "Message");
        //------------------------------ Variaveis para aceder a Tabela --------------------------
        int columncount = dtpdf.Columns.Count;
        int rowcount = dtpdf.Rows.Count;
        //-------------------------------Iniciaçao de criação do documento -----------------------
        Document pdf1 = new Document(PageSize.A4_LANDSCAPE.Rotate());

        using (MemoryStream output = new MemoryStream())
        {
            pdf1.SetMargins(0, 0, 80, 50);
            iTextSharp.text.Font font20 = iTextSharp.text.FontFactory.GetFont(iTextSharp.text.FontFactory.HELVETICA, 10);
            //----------------------------------Preparação da Tabela ---------------------------------
            PdfPTable table = new PdfPTable(columncount);
            //-----------------------------------Criação de Ficheiro ---------------------------------
            string path = System.Web.HttpContext.Current.Server.MapPath(Path);
            //string path = System.IO.Path.GetTempPath();
            //Label1.Text = path.ToString();
            //PdfWriter pdfWriter = PdfWriter.GetInstance(pdf1, new FileStream(path + "/" + FileName + ".pdf", FileMode.Create));
            PdfWriter pdfWriter = PdfWriter.GetInstance(pdf1, output);
            //----------------------------------- Dimensões da Tabela ---------------------------------------
            table.WidthPercentage = 90;
            //-------------------------------Criação do Header e Footer de cada folha-------------------------
            KIOSK.Classes.Header_Footer page = new Classes.Header_Footer();

            //-----------------------------------Inserção de conteudos -------------------------------
            pdfWriter.PageEvent = page;
            pdf1.Open();
            //table.AddCell(HttpContext.Current.Request.QueryString["position"].ToString());
            for (int z = 0; z < columncount; z++)
            {
                var sabersenao = dtpdf.Columns[z].ToString();
                table.AddCell(new Phrase(sabersenao, font20));
            }
            for (int u = 0; u < rowcount; u++)
            {
                int contador = 0;
                while (contador < columncount)
                {
                    var CamposCorrigidos = dtpdf.Rows[u].ItemArray[contador].ToString();
                    StringBuilder ConvPassword = new StringBuilder(CamposCorrigidos);
                    ConvPassword.Replace("&amp;", string.Empty);
                    ConvPassword.Replace("&nbsp;", string.Empty);
                    string CamposCorrigidos2 = ConvPassword.ToString();
                    table.AddCell(new Phrase(CamposCorrigidos2, font20));
                    contador += 1;
                }
            }
            //----------------------Abertura/Fecho e inserção do componentes necessrios ao pdf---------
            pdf1.Add(table);
            pdf1.Close();
            //System.Web.HttpContext.Current.Response.ClearContent();
            //System.Web.HttpContext.Current.Response.ClearHeaders();
            //System.Web.HttpContext.Current.Response.ContentType = "application/pdf";
            //System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
            //System.Web.HttpContext.Current.Response.BinaryWrite(output.ToArray());
            //System.Web.HttpContext.Current.Response.End();
            //System.Web.HttpContext.Current.Response.Flush();
            //System.Web.HttpContext.Current.Response.Clear();
            //System.Web.HttpContext.Current.Response.ContentType = "application/pdf";
            //System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "PdfViewer; filename=" + FileName +".PDF");
            ////System.Web.HttpContext.Current.Response.AddHeader("content-length", output.Length.ToString());
            //System.Web.HttpContext.Current.Response.BinaryWrite(output.ToArray());
            //System.Web.HttpContext.Current.Response.End();

            //output.Read(pdfByte, 0, (int)pdfByte.Length);

            output.Read(pdfByte, 0, (int)pdfByte.Length); 
            var strBase64 = Convert.ToBase64String(pdfByte);
        }
        return Convert.ToBase64String(pdfByte);

    }

和错误:

无法访问已关闭的流。

thansk

内存字符串直接到文件显示在html中

如果你知道内存流将返回的内容类型,你可以将内存流读入处理该类型的变量,然后处理它。

是一个字符串的例子,请参见如何从MemoryStream中获取字符串?它们将字符串写入内存流,然后再将其读出来。

这是可能的,您将不得不将内存流转换为字节数组。然后必须将字节数组转换为Base64字符串。最后你需要将base64字符串放入img src

关于html中base64到image的解释。

请注意,这将适用于图像。任何其他文件将无法工作,因为这些文件需要下载,因此需要有一个物理位置。除非你打算为要显示的文件类型编写一个javascript处理程序。

更新:对于pdf文件,您可以执行以下操作,但它可能不兼容跨浏览器。

后台代码

//string filepath = Server.MapPath("/Temp.pdf");
byte[] pdfByte; //= Helper.GetBytesFromFile(filepath);
using(var stream = ....) {
stream.read(pdfByte,0,(int)pdfByte.length);
var strBase64=Convert.ToBase64String(pdfByte);
HTML

<object data=",<<yourBase64StringHereWithoutthesmallerthenbiggerthenquotes==>>" type="application/pdf" width="800px"></object>

更新你的代码:

public string ExportMemoryPdf(DataTable dtpdf, String Path)
{
    string User = System.Web.HttpContext.Current.User.Identity.Name.ToString();
    string Date = DateTime.Now.ToString();
    string Year = DateTime.Now.ToString("yyyy");
    string Month = DateTime.Now.ToString("MM");
    string Day = DateTime.Now.ToString("dd");
    string Hour = DateTime.Now.ToString("hh");
    string Minutes = DateTime.Now.ToString("mm");
    string Seconds = DateTime.Now.ToString("ss");
    string FileName = User + Day + Month + Year + Hour + Minutes + Seconds;
    Request.QueryString["Position"] + "With the Filename: " + FileName;
    string Message = "The User Asked For a PDF File From the Table With the Filename: " + FileName;
    int columncount = dtpdf.Columns.Count;
    int rowcount = dtpdf.Rows.Count;
    Document pdf1 = new Document(PageSize.A4_LANDSCAPE.Rotate());
        pdf1.SetMargins(0, 0, 80, 50);
        iTextSharp.text.Font font20 = iTextSharp.text.FontFactory.GetFont(iTextSharp.text.FontFactory.HELVETICA, 10);
        PdfPTable table = new PdfPTable(columncount);
        string path = System.Web.HttpContext.Current.Server.MapPath(Path);
        table.WidthPercentage = 90;
        KIOSK.Classes.Header_Footer page = new Classes.Header_Footer();
        for (int z = 0; z < columncount; z++)
        {
            var sabersenao = dtpdf.Columns[z].ToString();
            table.AddCell(new Phrase(sabersenao, font20));
        }
        for (int u = 0; u < rowcount; u++)
        {
            int contador = 0;
            while (contador < columncount)
            {
                var CamposCorrigidos = dtpdf.Rows[u].ItemArray[contador].ToString();
                StringBuilder ConvPassword = new StringBuilder(CamposCorrigidos);
                ConvPassword.Replace("&amp;", string.Empty);
                ConvPassword.Replace("&nbsp;", string.Empty);
                string CamposCorrigidos2 = ConvPassword.ToString();
                table.AddCell(new Phrase(CamposCorrigidos2, font20));
                contador += 1;
            }
        }
    var base64String = string.Empty;
    using (MemoryStream output = new MemoryStream())
    {
        PdfWriter pdfWriter = PdfWriter.GetInstance(pdf1, output);
        pdfWriter.PageEvent = page;
        pdf1.Open();
        pdf1.Add(table);
        pdf1.Close();
        bytes = output.ToArray();
        var base64String = Convert.ToBase64String(bytes);
    }
    return base64String;

}