我們在ASP.NET Web應用程序中有某種文件資源管理器。流式HTML文件在IE中沒有打開選項
它可以將駐留在外部的各種類型的文件傳輸給用戶。 現在一切工作正常,但現在他們想流HTML文件,他們給出的問題。
當我想在IE中流式處理HTML文件時,下載提示不會讓我選擇打開它,它只有「保存」和「另存爲」選項。
我一直在Google上搜尋幾天,但唯一能找到的是如何關閉打開按鈕,但我希望它在那裏,而不是默認情況下。 Firefox和Chrome在他們的下載提示中都有一個打開選項。
在外部服務器上的代碼流文件是如下:
注:文件是我們自己的文件對象的實例,其中包含的信息,如路徑,文件名,國旗,......有關文件我們螞蟻流
System.IO.FileInfo fileInfo = new System.IO.FileInfo("C:\\\\MyFolder\\" + file.FullName);
if (fileInfo.Exists)
{
System.IO.FileStream fs = new System.IO.FileStream("C:\\\\MyFolder\\" + file.FullName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
string filename = file.Name.Replace(" ", "_");
page.Trace.IsEnabled = false;
page.Response.Expires = 0;
page.Response.Buffer = true;
page.Response.Clear();
page.Response.ContentType = MimeTypeParser.GetMimeType(fileInfo.FullName); //Gets the Correct content type: "text/html" in this case
page.Response.AddHeader("Content-Length", fs.Length.ToString());
page.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
int bufferSize = 8192;
// default to 4K, may want to use 8K instead
byte[] bytes = null;
bytes = new byte[bufferSize + 1];
int read = 0;
//Helper to read the bytes to the response steamer
while ((InlineAssignHelper(read, fs.Read(bytes, 0, bytes.Length))) != 0)
{
page.Response.OutputStream.Write(bytes, 0, read);
}
page.Response.OutputStream.Flush();
//close off response or else you get corrupted files
fs.Close();
page.Response.End();
}
else
{
page.Response.StatusCode = 404;
page.Response.End();
}
在應用程序本身下面的代碼是用來從流光獲取數據,並將它推到響應到客戶端:
public void StreamFile(int id, System.Web.HttpRequest clientRequest, System.Web.HttpResponse clientResponse)
{
try
{
OurDomain.File file = OurBLL.FileService.GetFile(id);
if (file != null)
{
string url = "http://FilestreamingServer?StreamFile.aspxid=" + file.Pkey + "&userName=" + userName;
Uri uri = new Uri(url);
System.Net.WebRequest request = System.Net.HttpWebRequest.Create(uri);
request.Method = System.Net.WebRequestMethods.Http.Get;
System.Net.WebResponse response = request.GetResponse();// 1st code block on the other server is invoked here
clientResponse.ContentType = response.Headers["Content-Type"];
clientResponse.AddHeader("Content-Length", response.Headers["Content-Length"]);
clientResponse.AppendHeader("Content-Disposition", response.Headers["Content-Disposition"]);
int bufferSize = 8192;
// default to 4K, may want to use 8K instead
byte[] bytes = null;
bytes = new byte[bufferSize + 1];
System.IO.Stream stream = response.GetResponseStream();
int read = 0;
while ((InlineAssignHelper(read, stream.Read(bytes, 0, bytes.Length))) != 0)
{
clientResponse.OutputStream.Write(bytes, 0, read);
}
clientResponse.OutputStream.Flush();
OurBLL.LogService.WriteDownloadLog(file);
//close off response or else you get corrupted files
clientResponse.End();
}
}
catch (System.Threading.ThreadAbortException ex)
{
//is due to response.end call.
}
catch (Exception ex)
{
//Log exception
}
}
當我看看F12的反應,我看到預期的頭在響應:
- 響應:HTTP/1.1 200 OK雜注:無緩存
- 的Content-Type:text/html的
- 服務器:Microsoft-IIS/7.5
- Refresh:3580
- Content-Disposition:attachment;文件名=的test.html
- X-已啓動通過:ASP.NET
- 日期:星期三,2013年12月11日11點19分19秒GMT
- 的Content-Length:222
至於我知道所有的東西都會顯示所有選項的常規下載提示。
我錯過了什麼?
是否有一個標題標籤來強制提示打開打開選項,就像你有「X-Download-Options:noopen」來關閉它一樣?
我知道你可以通過在Content-Disposition標題中添加「inline」而不是附件來打開瀏覽器中的文件,但這不是選項,因爲它會打開當前窗口中的頁面,我必須保留文件瀏覽打開。
我有同樣的問題。你找到解決方案嗎? – user1449511