C# 返回用javascript打开的文件的Webservice。行动!

C# 返回用javascript打开的文件的Webservice。行动!,c#,javascript,C#,Javascript,我有一个问题:我需要创建一个可以从javascript调用的webservice(用C#),它返回一个在中生成的文件(它是excel),对于他的返回,用javascript打开一个包含该文件的新窗口。 已经创建了从javascript调用的web服务。问题是,首先,返回这个文件,然后javascript获取(不需要将这个文件记录到光盘上)并在一个新窗口中打开它 我搜索了几天,返回文件的唯一解决方案就像一个字节数组,javascript甚至无法将其识别为文件,远远无法在另一个窗口中打开它。我已经通

我有一个问题:我需要创建一个可以从javascript调用的webservice(用C#),它返回一个在中生成的文件(它是excel),对于他的返回,用javascript打开一个包含该文件的新窗口。 已经创建了从javascript调用的web服务。问题是,首先,返回这个文件,然后javascript获取(不需要将这个文件记录到光盘上)并在一个新窗口中打开它

我搜索了几天,返回文件的唯一解决方案就像一个字节数组,javascript甚至无法将其识别为文件,远远无法在另一个窗口中打开它。我已经通过ActiveX找到了用javascript打开光盘上的文件(a.txt),但这并不好,因为首先它必须接收文件并记录它,这是它不想做的事情,但尽管它想做,但我不知道这是否可行

我提前感谢你给予的一切帮助。 你好

要扩展,代码如下: javascript

<script type="text/javascript">
    function exportar(ctrl) {
    var txt = ctrl.innerHTML;
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    xmlHttp.open("post", "http://localhost:65380/HtmlToExcel.asmx/ExportarExcel", true); 
    xmlHttp.onreadystatechange=doUpdate; 
    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
    xmlHttp.send("paginaHtml="+txt); 
} 

function doUpdate() { 
    if(xmlHttp.readyState==4)
    { 
        var xmlDoc=xmlHttp.responseXML;
        var resp = xmlHttp.responseText;
        var responseElement=xmlDoc.getElementsByTagName("string")[0];
        var respText=responseElement.firstChild.nodeValue; 

        // Open the window:
        var manej = window.open(respText);
        alert(manej);
        manej.document.body.innerHTML = respText;
    } 
} 
</script>
    public string ExportarExcel(string paginaHtml)
    {
        //return "<% Response.ContentType = \"application/vnd.ms-excel\" %>" + paginaHtml;
        // Generamos un objeto excel Aplicación:
        Microsoft.Office.Interop.Excel.Application Aplic = new Microsoft.Office.Interop.Excel.Application();
        Aplic.Visible = false;
        Microsoft.Office.Interop.Excel.Workbook libro = Aplic.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
        Microsoft.Office.Interop.Excel.Worksheet hoja = (Microsoft.Office.Interop.Excel.Worksheet)libro.Worksheets[1];
        if (hoja == null)
        {
            return null;
        }
        hoja.Rows.Clear();

        // Chequeamos lo que nos viene y lo cargamos en el excel:
        int i = 0;
        int m = 1; int n = 1;

        paginaHtml = paginaHtml.Replace('\r', ' ').Replace('\n', ' ');
        paginaHtml = paginaHtml.Replace("\\r", " ").Replace("\\n", " ");
        paginaHtml = paginaHtml.Replace("  ", " ");
        paginaHtml = paginaHtml.ToLower().Replace("<b>", "").Replace("</b>", "");
        paginaHtml = paginaHtml.Replace("><", "> <");

        string[] palabra = paginaHtml.Split(' ');

        while (i < palabra.Length)
        {
           // Code to convert html table to excel file.
        }
        string fichero = "HtmlToExcel-" + DateTime.Now.ToFileTime() + ".xls";
        string ruta = (string)Server.MapPath("~") + fichero;
        hoja.SaveAs(ruta, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel7, Type.Missing, Type.Missing, false, false, false, Type.Missing, Type.Missing, Type.Missing);
        // Cerramos el fichero:
        libro.Close(true, Type.Missing, Type.Missing); // Cierra el libro con cbios.
        hoja = null;
        Aplic.Quit();
        Aplic = null;

        //// Transformamos a byte[]:
        byte[] fExcel = ConvertirFileToByteArray(ruta);

        // Borramos Fichero:
        File.Delete(ruta);

        return Encoding.Unicode.GetString(fExcel);
    }
    public static byte[] ConvertirFileToByteArray(string ruta)
    {

        FileStream fs = new FileStream(ruta, FileMode.Open, FileAccess.Read);
        /*Create a byte array of file stream length*/
        byte[] b = new byte[fs.Length];
        /*Read block of bytes from stream into the byte array*/
        fs.Read(b, 0, System.Convert.ToInt32(fs.Length));
        /*Close the File Stream*/
        fs.Close();

        return b;
    }

函数exportar(ctrl){
var txt=ctrl.innerHTML;
xmlHttp=新的ActiveXObject(“Microsoft.xmlHttp”);
open(“post”http://localhost:65380/HtmlToExcel.asmx/ExportarExcel“,对);
onreadystatechange=doUpdate;
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
xmlHttp.send(“paginaHtml=“+txt”);
} 
函数doUpdate(){
if(xmlHttp.readyState==4)
{ 
var xmlDoc=xmlHttp.responseXML;
var resp=xmlHttp.responseText;
var responseElement=xmlDoc.getElementsByTagName(“字符串”)[0];
var respText=responseElement.firstChild.nodeValue;
//打开窗口:
var manej=window.open(respText);
警报(manej);
manej.document.body.innerHTML=respText;
} 
} 
网络服务

<script type="text/javascript">
    function exportar(ctrl) {
    var txt = ctrl.innerHTML;
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    xmlHttp.open("post", "http://localhost:65380/HtmlToExcel.asmx/ExportarExcel", true); 
    xmlHttp.onreadystatechange=doUpdate; 
    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
    xmlHttp.send("paginaHtml="+txt); 
} 

function doUpdate() { 
    if(xmlHttp.readyState==4)
    { 
        var xmlDoc=xmlHttp.responseXML;
        var resp = xmlHttp.responseText;
        var responseElement=xmlDoc.getElementsByTagName("string")[0];
        var respText=responseElement.firstChild.nodeValue; 

        // Open the window:
        var manej = window.open(respText);
        alert(manej);
        manej.document.body.innerHTML = respText;
    } 
} 
</script>
    public string ExportarExcel(string paginaHtml)
    {
        //return "<% Response.ContentType = \"application/vnd.ms-excel\" %>" + paginaHtml;
        // Generamos un objeto excel Aplicación:
        Microsoft.Office.Interop.Excel.Application Aplic = new Microsoft.Office.Interop.Excel.Application();
        Aplic.Visible = false;
        Microsoft.Office.Interop.Excel.Workbook libro = Aplic.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
        Microsoft.Office.Interop.Excel.Worksheet hoja = (Microsoft.Office.Interop.Excel.Worksheet)libro.Worksheets[1];
        if (hoja == null)
        {
            return null;
        }
        hoja.Rows.Clear();

        // Chequeamos lo que nos viene y lo cargamos en el excel:
        int i = 0;
        int m = 1; int n = 1;

        paginaHtml = paginaHtml.Replace('\r', ' ').Replace('\n', ' ');
        paginaHtml = paginaHtml.Replace("\\r", " ").Replace("\\n", " ");
        paginaHtml = paginaHtml.Replace("  ", " ");
        paginaHtml = paginaHtml.ToLower().Replace("<b>", "").Replace("</b>", "");
        paginaHtml = paginaHtml.Replace("><", "> <");

        string[] palabra = paginaHtml.Split(' ');

        while (i < palabra.Length)
        {
           // Code to convert html table to excel file.
        }
        string fichero = "HtmlToExcel-" + DateTime.Now.ToFileTime() + ".xls";
        string ruta = (string)Server.MapPath("~") + fichero;
        hoja.SaveAs(ruta, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel7, Type.Missing, Type.Missing, false, false, false, Type.Missing, Type.Missing, Type.Missing);
        // Cerramos el fichero:
        libro.Close(true, Type.Missing, Type.Missing); // Cierra el libro con cbios.
        hoja = null;
        Aplic.Quit();
        Aplic = null;

        //// Transformamos a byte[]:
        byte[] fExcel = ConvertirFileToByteArray(ruta);

        // Borramos Fichero:
        File.Delete(ruta);

        return Encoding.Unicode.GetString(fExcel);
    }
    public static byte[] ConvertirFileToByteArray(string ruta)
    {

        FileStream fs = new FileStream(ruta, FileMode.Open, FileAccess.Read);
        /*Create a byte array of file stream length*/
        byte[] b = new byte[fs.Length];
        /*Read block of bytes from stream into the byte array*/
        fs.Read(b, 0, System.Convert.ToInt32(fs.Length));
        /*Close the File Stream*/
        fs.Close();

        return b;
    }
公共字符串导出Excel(字符串分页HTML)
{
//返回“”+paginaHtml;
//总目标是超越Aplicación:
Microsoft.Office.Interop.Excel.Application Aplic=新的Microsoft.Office.Interop.Excel.Application();
Aplic.Visible=false;
Microsoft.Office.Interop.Excel.Workbook libro=Aplic.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet hoja=(Microsoft.Office.Interop.Excel.Worksheet)libro.Worksheets[1];
if(hoja==null)
{
返回null;
}
hoja.Rows.Clear();
//切克莫斯在维也纳和卡加莫斯都是卓越的:
int i=0;
int m=1;int n=1;
paginaHtml=paginaHtml.Replace('\r','').Replace('\n','');
paginaHtml=paginaHtml.Replace(“\\r”,”).Replace(“\\n”,”);
paginaHtml=paginaHtml.Replace(“,”);
paginaHtml=paginaHtml.ToLower().Replace(“,”).Replace(“,”);

paginaHtml=paginaHtml.Replace(“>您不能使用javascript将文件保存到本地磁盘,除非您使用


为什么需要“在新窗口中打开文件”?如果您只是从Web服务以文件的形式返回文件,并使用正确的内容类型,浏览器将提示保存/打开该文件。

除非使用javascript,否则无法使用javascript将文件保存到本地磁盘


为什么需要“在新窗口中打开文件”?如果您只是从Web服务中以文件的形式返回文件,且内容类型正确,浏览器将提示保存/打开该文件。

当您希望浏览器在新窗口中显示该文件或将其另存为下载文件时,浏览器必须向服务器发送新请求

当您通过javascript(异步)接收到该文件时,您不能告诉浏览器从新窗口中的页面请求该文件。您的数据位于客户端加载的页面中。
只需在客户端上用javascript打开一个新窗口,并通过HTTP请求要显示的文件。

当您希望浏览器在新窗口中显示文件或将其保存为下载时,浏览器必须向服务器发送新请求

当您通过javascript(异步)接收到该文件时,您不能告诉浏览器从新窗口中的页面请求该文件。您的数据位于客户端加载的页面中。
只需在客户端上使用javascript打开一个新窗口,并请求通过HTTP显示的文件。

您可以使用javascript打开一个新窗口,并使用该窗口URL的查询字符串访问您的web服务吗?

您可以使用javascript打开一个新窗口,并使用该窗口URL的查询字符串访问您的web服务吗服务?

你能对你的问题进行电子标定吗?无论如何,我的理解是,当调用Web服务时,你需要创建某种表格数据并在excel中打开它。这就是你想要的吗?你能对你的问题进行电子标定吗?无论如何,我的理解是,当调用Web服务时,你需要创建某种表格数据并在excel中打开它调用。这就是你想要的吗?我知道,单独使用HTTP可以恢复字符串或文档xml。@DumDum-你可以指向任何文件的URL。我一直使用HTTP下载PDF文档。我会证明这个解决方案。than's.@DumDum-我不理解你最后的评论。对不起。我会尝试这个解决方案。谢谢。我知道,单独使用HTTP可以恢复字符串或文档xml。@DumDum-您可以将URL指向任何文件。我一直使用HTTP下载PDF文档。我将证明此解决方案。than's.@DumDum-我不理解您最后的评论。对不起。我将尝试此解决方案。谢谢。不,我不能。我不知道如何做。因为它必须先在客户端中记录文件。No、 我不能。我不知道该怎么做。因为它必须先在客户端记录文件。