asp.net中的文件下载选项?

时间:2012-01-04 04:07:27

标签: asp.net

在网络应用程序[asp.net]中,我写了一个下载代码,它工作正常,但在下载一个窗口显示“打开”/“保存”时,我不想问这个消息,当我点击下载它应该显示文件。在新窗口或新页面中。 [下载页面是excel]。你能帮助我吗。比你。我的代码是这样的:

    string pah = "./Files/" + ds.Tables[0].Rows[0]["targetname"].ToString();                     
        // You should put more appropriate MIME type as per your file time - perhaps based on extension
        Response.ContentType = "application/octate-stream";
        //Response.AddHeader("content-disposition", "attachment;filename=[your file name w/o path]");
        Response.AddHeader("content-disposition", "attachment;filename="+ds.Tables[0].Rows[0]["targetname"].ToString());
        // Start pushing file to user, IIS will do the streaming.
        Response.TransmitFile(pah);
        Response.Flush(); 
你可以帮我吗?谢谢。

2 个答案:

答案 0 :(得分:1)

ASP donot在客户端机器上具有句柄,因此无法直接使用关联的应用程序打开文件。出于安全考虑,一个好的浏览器总会提示用户“你想用这个文件做什么?打开?保存到磁盘?取消?“。仍然可能有一些ActiveX方法在Microsoft IE中执行此操作,就像有其他浏览器的Microsoft Word ActiveX和浏览器插件。

答案 1 :(得分:1)

此主题可以帮助您:

您需要更改"附件;" to" inline;"在你的Response标题中。

        Response.AddHeader("content-disposition", "inline;filename="+ds.Tables[0].Rows[0]["targetname"].ToString());
        Response.TransmitFile(pah);
        Response.Flush(); 

如果您仍然遇到与Response.TransitFile相同的问题,请使用以下方法。还要确保目标文件名具有XLSX扩展名:

// Open the file.
iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,  System.IO.FileAccess.Read,System.IO.FileShare.Read);

// Total bytes to read:
dataToRead = iStream.Length;

Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + +ds.Tables[0].Rows[0]["targetname"].ToString());

// Read the bytes.
while (dataToRead > 0)
{
    // Verify that the client is connected.
    if (Response.IsClientConnected) 
    {
        // Read the data in buffer.
        length = iStream.Read(buffer, 0, 10000);

        // Write the data to the current output stream.
        Response.OutputStream.Write(buffer, 0, length);

        // Flush the data to the HTML output.
        Response.Flush();

        buffer= new Byte[10000];
        dataToRead = dataToRead - length;
    }
    else
    {
        //prevent infinite loop if user disconnects
        dataToRead = -1;
    }
}

但我真的建议使用基于HTML的文件查看器,例如: