2014-12-08 44 views
0

我已經創建了一個用戶可以從中下載文件的代碼。將被下載的文件僅用於圖像文件。無法以編程方式下載.eps文件

我的代碼如下所示。

try 
{ 
    System.IO.FileInfo fileInfo = new FileInfo(file.Name); 
    // replace special characters with blank. 
    string filename = GeneralMethods.MakeValidFileName(Path.GetFileNameWithoutExtension(file.Name)); 
    filename += fileInfo.Extension; 
    byte[] obj = (byte[])file.OpenBinary(); 
    Response.Clear(); 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.Cache.SetCacheability(System.Web.HttpCacheability.Private); 
    Response.AppendHeader("Content-Disposition", "attachment; filename= " + filename); 
    Response.ContentType = MimeMapping.GetMimeMapping(filename); 
    if (Response.IsClientConnected) 
     Response.BinaryWrite(obj); 
    Response.Flush(); 
    // Response.Close(); 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 

} 
catch (Exception ex) 
{  
} 
finally 
{ 

} 

當我使用此代碼下載.eps文件無法打開客戶端應用程序的文件。

我在代碼中缺少什麼?

+0

你給這行代碼'應用/ postscript'沒有ü雙重檢查呢? – BNN 2014-12-08 09:45:18

+0

是的,先生,我檢查過它。一樣的。 – 2014-12-08 09:46:47

+0

嘗試給這樣的'應用程序/ eps'不確定,但試試 – BNN 2014-12-08 09:50:48

回答

0

試圖修改這一行:

Response.AppendHeader("Content-Disposition", "attachment; filename= " + filename); 

看起來像這樣:

var cd = new System.Net.Mime.ContentDisposition 
{ 
    FileName = filename, 
    Inline = false, 
}; 

Response.AddHeader("Content-Disposition", cd.ToString()); 

添加內容處置這樣在過去爲我工作。

+0

我根據您的建議更改了代碼,但沒有幫助 – 2014-12-08 11:08:08

0

嘗試各種代碼技巧後終於找到了答案。

我在代碼中唯一缺少的是在響應對象中定義「Content-Length」標頭。

因此,代碼是按照下文:

try 
{ 
    System.IO.FileInfo fileInfo = new FileInfo(file.Name); 
    string filename = GeneralMethods.MakeValidFileName(Path.GetFileNameWithoutExtension(file.Name)); 
    filename += fileInfo.Extension; 
    byte[] obj = (byte[])file.OpenBinary(); 
    Response.Clear(); 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.Cache.SetCacheability(System.Web.HttpCacheability.Server); 
    var cd = new System.Net.Mime.ContentDisposition { FileName = file.Name, Inline=false}; 
    Response.AppendHeader("Content-Disposition", cd.ToString()); 
    Response.AppendHeader("Content-Length",obj.Length.ToString()); 
    Response.ContentType = MimeMapping.GetMimeMapping(filename);     
    if (Response.IsClientConnected) 
     Response.BinaryWrite(obj); 
    Response.Flush(); 
    // Response.Close(); 
    HttpContext.Current.ApplicationInstance.CompleteRequest(); 
} 
catch (Exception ex) 
{  
    Response.Redirect(Request.UrlReferrer.ToString()); 
} 
finally 
{ 
} 

現在,它的工作在我的情況... !!! :-)。

希望這有助於其他太..

感謝

相關問題