内存字符串直接到文件显示在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("&", string.Empty);
ConvPassword.Replace(" ", 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
如果你知道内存流将返回的内容类型,你可以将内存流读入处理该类型的变量,然后处理它。
是一个字符串的例子,请参见如何从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("&", string.Empty);
ConvPassword.Replace(" ", 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;
}