在网络应用程序[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();
你可以帮我吗?谢谢。
答案 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的文件查看器,例如: