Fazer uma PerguntaFazer uma Pergunta
 

RespondidoResponse.WriteFile 問題詢問

  • quinta-feira, 31 de agosto de 2006 3:27wave0707 Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Dear all,

    請教各問 Solution, 我有一支程式去取得 Fielserver 檔案, 然後把資料用 Response.WriteFile 丟給 Client, 但我想在 WriteFile 完成後把, 這支頁面關掉, 請問有何方法, 或是 www.microsoft.com/downloads 的效果,點選以後跳出下載視窗,檔案丟出來後,關閉視窗,謝謝。

            try
            {
                #region File 處理

                FileInfo fi = new FileInfo(file_path);

                if (fi.Extension != null)
                {
                    switch (fi.Extension.ToLower())
                    {
                        case ".htm":
                        case ".html":
                            type = "text/HTML";
                            break;

                            ...........................................

                            ...........................................


                    }
              
      }

                Response.AppendHeader("content-disposition", "attachment; filename=" + Server.UrlEncode(fi.Name));
                Response.WriteFile(file_path);
                Response.End();
                #endregion
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }

     

     

Respostas

Todas as Respostas

  • quinta-feira, 31 de agosto de 2006 6:11DotJumMVPMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    您好:
    若用簡單的想法,
    您可以在檔案下載的顯示使用 Target="_blank"
    ex : 下載檔案 (Target="_blank") 觸發你專門輸出檔案的網頁

    例如這篇
    http://forums.microsoft.com/msdn-cht/ShowPost.aspx?PostID=314597&SiteID=14

    試試看這樣能否解決您的問題

  • quinta-feira, 31 de agosto de 2006 6:50wave0707 Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    謝謝回覆, 我剛是這使用 target="_blank",程式會打開空視窗,然後會出現下載檔案對話方塊,但是下載後不會自動關掉新的視窗,請問有什麼方法可以在同一個程式內,Response.WriteFile 後,還可以控制網頁功能,謝謝

  • quinta-feira, 31 de agosto de 2006 7:30璉璉MVP, ModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido

    我自己是用:

    http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=8&Function=43

    不另外開新視窗。

    在上面那個函數的子函數:

    http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Function&Module=8&Function=42

    SetResponseHeader("application/octet-stream", strFileName, True)
    Response.WriteFile(absPath)
    Response.End()

    我也有專案是這樣呼叫,讓他強制跳出存檔對話盒。

    微軟那個主要是因為他做在 Botton 上,不是連結上,所以會另外用個 window.open 來開,若是網址直接是檔案,我記得 IE 會自己關閉這個視窗,或著你可以用開啟來源來關閉它,例如 VBScript:

    Set popupWindow = window.open(xxxxx)

    popupWindow.close

    不過在 Close 前要先讓你的母視窗睡一下,才會進入檔案下載。

  • quinta-feira, 31 de agosto de 2006 7:43DotJumMVPMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido

    我這邊用這樣的方法,下載後 新視窗會自己消失。
    如果你那邊還是不行,可能您就在下載檔後,增加一個
    增各JavaScript

    Response.Write("<script language='javascript'>window.opener = window; window.close(); </script>");
    用JavaScript的方式來關閉。

  • quinta-feira, 31 de agosto de 2006 8:35小朱MVP, ModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido
    我都用 Response.BinaryWrite() 呢 ...
  • quinta-feira, 31 de agosto de 2006 8:50wave0707 Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    謝謝大家回覆, 我又試寫了一段程式, 程式呈現有兩種方式,

    1. PSD、AI、PDF 跳出下載對話方塊後,不會自動關閉視窗

    2. EXE、BMP、BIN 跳出下載對話方塊後,就會自動關閉視窗

            Response.AppendHeader("content-disposition", "attachment; filename=DC7057.bin");
            Response.WriteFile(@"C:\_job_items\temp\scaning\DC7057.bin");
            Response.End();

    所以我想再試試看 用 Javascript 然後讓母視窗睡一下的方法,因為之前我開啟下載視窗後,接著做 [window name].close() 的指令時,他就直接關掉了,另外我也會試試看 Response.BinaryWrite() 的方式,謝謝。

  • quarta-feira, 6 de setembro de 2006 1:16小帥悶 Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Dear wave0707

    小弟也遇到同樣的問題,請問您解決產生pdf後,不會自動關閉的問題了嗎?

  • quarta-feira, 6 de setembro de 2006 1:45璉璉MVP, ModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    說實在的,我不太清楚為何要另開視窗。

    直接點選 aspx 的網址不就可以輸出下載?就不會有不能關閉視窗的問題,因為根本不存在另開視窗。

  • sexta-feira, 15 de setembro de 2006 1:33wave0707 Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    其實我也忘了當初未何要開新視窗,可能是想再傳出檔案後,在針對頁面作些處理,另外就是因為我的 FileServer 跟 IIS Server 不是在同一台,為了跨機器存取,我在 .net framework 1.X 時,使用 impersonate 來做存取不成功,只好把所有的檔案存取,統一寫在一個 Application 裡面,然後給他匿名存取,存取帳號使用 Admin 權限的帳號,才過得去,為了好管理,我把檔案存取都用跳出視窗來處理,現在 ASP2.0 好像就不需要了,我現在使用 整合Window 驗證,然後使用 impersonate,就可以存取別台機器,這樣我就不需要再把檔案存取抽出來寫了。

    現在我是直接採用 .aspx 讓他在同一視窗執行,確實已經不需要關閉視窗的功能,不過也無法做下載檔案後的程式處理。微軟 Download 的功能,我看了他的 Script,是用 Client script 來達成目標的,所以他還能導到感謝頁面,至於有些檔案類型會自動關頁面,有些不行,我想應該跟 Client 端 IE 的設定有關 (檔案的關連),因為我不能用程式控制開關跳出視窗,所以我就不用跳出視窗的方式,有些網站在下載檔案後,會留個小視窗在螢幕上,我想可能也是這各問題。

  • sexta-feira, 15 de setembro de 2006 6:45璉璉MVP, ModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    你要的東西我做了一個簡單的範例:

    http://tlcheng.twbbs.org/Test/Download/welcome.htm

    完整範例壓縮檔:

    http://tlcheng.twbbs.org/Test/Download/download.zip

    檔名都先寫死,比較好測試,作法邏輯:

    welcome.htm 點連結 -> 跳出視窗 Test.aspx (Response.WriteFile) -> 下載 pdf 檔 -> 自動關閉

    (自己視窗在連結點選後) -> 轉 thanks.htm

    註:放在 Test 子目錄下的東西不保證長長久久... 至少這幾天會留著。

  • sábado, 16 de setembro de 2006 1:54小朱MVP, ModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    微軟 Download Center 的作法應該是:

    1. 點選檔案時,轉向到 Thanks 頁面 .

    2. 輸出下載路徑到 Thanks 頁面,並設定數秒後啟動下載(使用 window.setTimeout() 加上 window.location.href)

    像 CNet, Sourceforge.net 的下載應該也是這樣的作法 .

  • sábado, 16 de setembro de 2006 4:17wave0707 Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    謝謝各位, 我這邊直接執行, 開啟檔案還是沒有自動關閉, 有些電腦執行正常, 我有另外試過不同的檔案格式, 執行結果不盡相同, 有的可以關閉, 有的就空了一各視窗在那邊, 我想在公司再多找幾台來試試, 看是否能使用程式完全控制, 免得使用者會太過困擾
  • quarta-feira, 20 de setembro de 2006 13:18璉璉MVP, ModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    html 改成小朱說的方法,壓縮檔沒動。

    不過這樣會跳出警告封鎖列,必須再點一次...

  • quarta-feira, 20 de setembro de 2006 13:25璉璉MVP, ModeradorMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    剛剛試過,如果不在乎封鎖列的話,直接用

    <iframe style='display: none; ' src="test.aspx"></iframe>

    也是可以...

    就不用寫 timeout 程式碼。