線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3725
推到 Plurk!
推到 Facebook!

下載PDF檔無法開��

尚未結案
nancy
一般會員


發表:8
回覆:19
積分:10
註冊:2002-07-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-21 16:13:53 IP:61.222.xxx.xxx 未訂閱
我寫了一個網路硬碟的程式,可以上傳下載檔案,很奇怪的是下載PDF檔到自己的硬碟上後開?會顯示檔案已毀損,但其他檔案都沒有問題,實在不知道該怎麼辦,請各位前輩幫幫忙,程式碼如下:     
 
private void DownloadFile()
{
  byte[] buf;
  try
  {
    ReadFile(out buf, Request["filename"]);
    Response.ClearHeaders();
    Response.Clear();
    Response.Expires = 0;
    Response.Buffer = true;
    string filename = HttpUtility.UrlEncode(Path.GetFileName(Request["filename"]),Encoding.UTF8);
    Response.AddHeader("content-disposition","attachment;FileName="  filename);
    Response.ContentType = "Application/octet-stream";
    Response.BinaryWrite(buf);
                        
  }
  catch(Exception e)
  {
    ltScript.Text = "alert(\""   e.Message.Replace("\\n","\n")   "\");";
  }
}
                
private void ReadFile(out byte[] buf, string filename)                
{
                        
  if (!File.Exists(filename))
    throw new Exception("錯誤: 檔案不存在!");
  else
  {
    Stream s = File.OpenRead(filename);
    buf = new byte[s.Length];
    s.Read(buf,0,buf.Length);
    s.Close();
  }
}
wodahs
初階會員


發表:0
回覆:33
積分:26
註冊:2004-02-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-22 10:38:27 IP:61.231.xxx.xxx 未訂閱
您的寫法是以前用Asp的寫法,Asp.net有另外的寫法... 如果要依您的寫法,建議修改如下:    
引言: 我寫了一個網路硬碟的程式,可以上傳下載檔案,很奇怪的是下載PDF檔到自己的硬碟上後開?會顯示檔案已毀損,但其他檔案都沒有問題,實在不知道該怎麼辦,請各位前輩幫幫忙,程式碼如下:
 
private void DownloadFile()
{
  //byte[] buf; //Remark
  try
  {
    // ReadFile(out buf, Request["filename"]); //Remark
    string rf = Request["filename"]; //新增,視需要使用Server.MapPath
    //在這邊加上檢查檔案是否存在
    Response.ClearHeaders();
    Response.Clear();
    Response.Expires = 0;
    Response.Buffer = true;
    string filename = HttpUtility.UrlEncode(Path.GetFileName(rf),Encoding.UTF8);//修改
    Response.AddHeader("content-disposition","attachment;FileName="  filename);
    Response.ContentType = "Application/octet-stream";
   // Response.BinaryWrite(buf); //Remark
    Response.WriteFile(rf);                
  }
  catch(Exception e)
  {
    ltScript.Text = "alert(\""   e.Message.Replace("\\n","\n")   "\");";
  }
}
                
private void ReadFile(out byte[] buf, string filename)                
{
                        
  if (!File.Exists(filename))
    throw new Exception("錯誤: 檔案不存在!");
  else
  {
    Stream s = File.OpenRead(filename);
    buf = new byte[s.Length];
    s.Read(buf,0,buf.Length);
    s.Close();
  }
}
wodahs ====================================================================== 我是非出身科班的菜鳥,瞎子摸象,寫錯的地方,請大家包涵包涵,不要太認真 ^^ 歡迎大家批評指教,適時糾正我錯誤觀念,這樣我才會進步並學到正確的知識 ^^ ======================================================================
nancy
一般會員


發表:8
回覆:19
積分:10
註冊:2002-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-23 16:12:24 IP:61.222.xxx.xxx 未訂閱
感謝您的回覆,但是我試了您的方法後還是無法解決,完整的錯誤訊息是"開?此文件時出錯,檔案已毀壞且無法修復"
wodahs
初階會員


發表:0
回覆:33
積分:26
註冊:2004-02-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-23 16:28:35 IP:210.64.xxx.xxx 未訂閱
程式碼我這邊是有先跑過可以執行.可能麻煩您再確認一下下面幾點: 1.原來的ReadFile在我修改的已經沒有使用. 2.檢查PDF檔案是否存在,路徑是否正確(我上面事先預設放在同個目錄,所以省去檢查) 3.寫出時是使用Response.WriteFile,而不是Response.BinaryWrite. 上面答案應該都是"Yes"才對. wodahs ====================================================================== 我是非出身科班的菜鳥,瞎子摸象,寫錯的地方,請大家包涵包涵,不要太認真 ^^ 歡迎大家批評指教,適時糾正我錯誤觀念,這樣我才會進步並學到正確的知識 ^^ ======================================================================
nancy
一般會員


發表:8
回覆:19
積分:10
註冊:2002-07-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-23 16:53:54 IP:61.222.xxx.xxx 未訂閱
您好!關於您的問題我已詳細檢查過,程式沒錯,路徑沒錯,PDF檔也ok,但是問題仍在...我想問題原因應該不是在於程式邏輯,也不是路徑,因為其他檔案下載後開?都是沒問題的,唯獨
wodahs
初階會員


發表:0
回覆:33
積分:26
註冊:2004-02-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-23 17:10:29 IP:211.72.xxx.xxx 未訂閱
引言: 您好!關於您的問題我已詳細檢查過,程式沒錯,路徑沒錯,PDF檔也ok,但是問題仍在...我想問題原因應該不是在於程式邏輯,也不是路徑,因為其他檔案下載後開?都是沒問題的,唯獨>< face="Verdana, Arial, Helvetica"> 您有用過UltraEdit 或其他二進位編輯軟體開啟你下載的檔案? 如果有問題開啟後的檔案內容比較常見是下面兩種. 1.裏面是類似Html的指令 2.是Unicode (但開頭得像%PDF-x.x%) 如果不會看(或都不是),寄您的檔案給我,我幫您看. wodahs ====================================================================== 我是非出身科班的菜鳥,瞎子摸象,寫錯的地方,請大家包涵包涵,不要太認真 ^^ 歡迎大家批評指教,適時糾正我錯誤觀念,這樣我才會進步並學到正確的知識 ^^ ======================================================================
code6421
版主


發表:43
回覆:223
積分:208
註冊:2002-08-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-23 17:22:27 IP:220.135.xxx.xxx 未訂閱
try this.    [code] Response.AddHeader("content-disposition","attachment;FileName="+ filename); Response.ContentType = "Application/octet-stream";                 Response.BinaryWrite(buf); Response.Flush(); Response.Close(); [/code Just coding... Taiwan:http://code6421.ktop.com.tw China:http://home.hoolee.com/~code6421
------
Just codeing...
nancy
一般會員


發表:8
回覆:19
積分:10
註冊:2002-07-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-23 18:27:04 IP:61.222.xxx.xxx 未訂閱
使用code6421的方法已解決問題,真是太感謝了!也謝謝wodahs的熱心幫忙!
系統時間:2024-05-19 7:26:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!