2014-12-08 79 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 
{ 
} 

现在,它的工作在我的情况... !!! :-)。

希望这有助于其他太..

感谢

相关问题