2013-12-11 20 views
1

我們在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」而不是附件來打開瀏覽器中的文件,但這不是選項,因爲它會打開當前窗口中的頁面,我必須保留文件瀏覽打開。

+0

我有同樣的問題。你找到解決方案嗎? – user1449511

回答

0

我有同樣的問題。這是我發現的:

  • 如果您選擇另一個「默認程序」比Internet Explorer打開HTML文件,您將會得到「打開」選項。

注意:這僅適用於html文件。例如,如果您下載PDF文件,並且默認程序將打開pdf設置爲Internet Explorer,則您仍將獲得「打開」選項。

任何人都有更好的解決方案?