2011-04-19 62 views
3

我在數據庫中保存了文檔文件/ pdf文件或txt文件。現在要獲取該文件,我使用下面的代碼。文件下載奇怪問題

JobApplicantResume oApplicantResumne = new JobApplicantResume(); 
DataSet dsApplicantResume = oApplicantResumne.GetJobApplicantResumeByJobApplicantResumeId(1552);//1552 Long value 
Response.ClearContent(); 
Response.ClearHeaders(); 
Response.Clear(); 
Response.Buffer = true; 
Response.Charset = ""; 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.ContentType = "application/xx-xxxx"; 
Response.AddHeader("Content-Disposition", "attachment;filename=" + dsApplicantResume.Tables[0].Rows[0]["sFileName"].ToString()); 
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); 
Byte[] bytes = (Byte[])dsApplicantResume.Tables[0].Rows[0]["binFile"]; 
Response.BinaryWrite(bytes); 
Response.Flush(); 
Response.End(); 

它給出了確切的文件。沒有問題是打開文件。

在其他一些網頁我用同樣的代碼:

JobApplicantResume oApplicantResumne = new JobApplicantResume(); 
DataSet dsApplicantResume = oApplicantResumne.GetJobApplicantResumeByJobApplicantResumeId(1552);//1552 Long value 
Response.ClearContent(); 
Response.ClearHeaders(); 
Response.Clear(); 
Response.Buffer = true; 
Response.Charset = ""; 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.ContentType = "application/xx-xxxx"; 
Response.AddHeader("Content-Disposition", "attachment;filename=" + dsApplicantResume.Tables[0].Rows[0]["sFileName"].ToString()); 
//Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); 
Byte[] bytes = (Byte[])dsApplicantResume.Tables[0].Rows[0]["binFile"]; 
Response.BinaryWrite(bytes); 
Response.Flush(); 
Response.End(); 

它也給要下載的文件。但是當我打開它時,數據會以某種不同的格式出現。

像:

؟½ï؟½ï؟½ï؟½ï؟½ï؟ 

垃圾數據。我不明白爲什麼問題即將到來。如果任何人遇到這種類似的問題,或者任何建議/幫助對解決這個問題都會非常有幫助。

非常感謝您的關注。

+0

現在有點晚了。但是,現在可以解決它。 – Shubhojit 2014-06-24 10:15:41

回答

1

嘗試添加Unicode字節順序標記full example

//add the BOM 
    byte[] bBOM = new byte[] { 0xEF, 0xBB, 0xBF }; 
    byte[] bContent = ms.ToArray(); 
    byte[] bToWrite = new byte[bBOM.Length + bContent.Length]; 

    //combile the BOM and the content 
    bBOM.CopyTo(bToWrite, 0); 
    bContent.CopyTo(bToWrite, bBOM.Length); 

    //write to the client 
    HttpContext.Current.Response.Write(Encoding.UTF8.GetString(bToWrite)); 
    HttpContext.Current.Response.Flush(); 
    HttpContext.Current.Response.End();