當使用IE9或IE10下載檔案時,IE的下載管理會先出現「無法下載....」,須按「重試」後才能順利儲存檔案。

 
 2013-04-29_223058  
 
 

解決方式為將處理檔案Stream的下載程式最後的Response.Close(),改成Response.End(),即可正常提供IE9IE10下載。

 

 

test5.aspx

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test5.aspx.cs" Inherits="test5" debug="True" %>

<!DOCTYPE html>

<html>

<head>

<title>TEST</title>

</head>

<body>

<form id="form1" runat="server">

<asp:Button ID="Button1" runat="server" Text="下載" OnClick="Button1_Click"/>

 

<asp:Label ID="Label99" runat="server" Text=""></asp:Label>

</form>

</body>

</html>

 

 

test5.aspx.cs

 

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Text;

using System.IO;

 

public partial class test5: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)

{

}        

}

 

protected void Button1_Click(object sender, EventArgs e)   //儲存

{

FileDownload_2012(Page, "c://test.ppt");

}

 

public static bool FileDownload_2012(Page Page, string FullFileName)

{

string path = FullFileName;

if (File.Exists(path))

{

System.IO.Stream iStream = null;

byte[] buffer = new Byte[10000];

int length;

long dataToRead;

string filepath  = path;

string  filename  = HttpUtility.UrlEncode(Path.GetFileName(filepath));

try

{

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

dataToRead = iStream.Length;

Page.Response.ContentType = "application/octet-stream";

Page.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

                                  while (dataToRead > 0)

{

if (Page.Response.IsClientConnected)

{

length = iStream.Read(buffer, 0, 10000);

Page.Response.OutputStream.Write(buffer, 0, length);

Page.Response.Flush();

buffer= new Byte[10000];

dataToRead = dataToRead - length;

}

else

{

dataToRead = -1;

}

}

}

catch (Exception ex)

{

Page.Response.Write("Error : " + ex.Message);

}

finally

{

if (iStream != null)

{

iStream.Close();

}

//Page.Response.Close();

Page.Response.End();   //使用Response.Close()會導置IE10無法下載,需按重試才可以下載

}

return true;

}

return false;

}

}

arrow
arrow
    全站熱搜

    adamschen9921 發表在 痞客邦 留言(1) 人氣()