做了一个下载系统,可是如果是图片的时候就会直接在IE上显示图片,而不是产生一个下载对话框让客户端另存为!请问高手们如何解决??

解决方案 »

  1.   

    通过filestream读取啊!
    string FileName=@"c:\inetpub\wwwroot\login\upfile\admin\4063722106新建 文本文档.txt";
    System.IO.FileStream r=new System.IO.FileStream(FileName, System.IO.FileMode.Open);
    //设置基本信息
    Response.Buffer = false;
    Response.AddHeader("Connection", "Keep-Alive");
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName(FileName));
    Response.AddHeader("Content-Length", r.Length.ToString());        
    while (true)
    {
    //开辟缓冲区空间
    byte[] buffer = new byte[1024];
    //读取文件的数据
    int leng = r.Read(buffer, 0, 1024);
    if (leng == 0)//到文件尾,结束
    break;
    if (leng == 1024)//读出的文件数据长度等于缓冲区长度,直接将缓冲区数据写入
    Response.BinaryWrite(buffer);
    else
    {
    //读出文件数据比缓冲区小,重新定义缓冲区大小,只用于读取文件的最后一个数据块
    byte[] b = new byte[leng];
    for (int i = 0; i < leng; i++)
    b[i] = buffer[i];
    Response.BinaryWrite(b);
    }
    }
    r.Close();//关闭下载文件
    Response.End();//结束文件下载
      

  2.   

    555555有没有哪位帮帮改为VB.net的??谢谢啦!!!
      

  3.   

    C#转换VB.NET
    你可以到这个站点进行转换http://www.developerfusion.co.uk/utilities/convertcsharptovb.aspxUK的站点
      

  4.   

    Dim FileName As String = "c:\inetpub\wwwroot\login\upfile\admin\4063722106新建 文本文档.txt" 
    Dim r As System.IO.FileStream = New System.IO.FileStream(FileName, System.IO.FileMode.Open) 
    Response.Buffer = False 
    Response.AddHeader("Connection", "Keep-Alive") 
    Response.ContentType = "application/octet-stream" 
    Response.AddHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName(FileName)) 
    Response.AddHeader("Content-Length", r.Length.ToString) 
    While True 
     Dim buffer(1024) As Byte 
     Dim leng As Integer = r.Read(buffer, 0, 1024) 
     If leng = 0 Then 
       ' break 
     End If 
     If leng = 1024 Then 
       Response.BinaryWrite(buffer) 
     Else 
       Dim b(leng) As Byte 
       Dim i As Integer = 0 
       While i < leng 
         b(i) = buffer(i) 
         System.Math.Min(System.Threading.Interlocked.Increment(i),i-1) 
       End While 
       Response.BinaryWrite(b) 
     End If 
    End While 
    r.Close 
    Response.End
    这是转换出来的效果..用了 Firestone2003(笨笨小猪) 的C#代码进行转换
      

  5.   

    谢谢啦!!自己慢慢的也写出来啦!!不过还是很感谢!!不过问题又出来啦!在下载.wav格式的时候又出错!!我还有一个控件在页面上播放这个文件.是让客户端试听的!可是点另存的时候却出现了如下错误!该进程无法访问文件“L:\网站资料\Myweb\Sound\Upfiles\wav\2006\7\200678114111.wav”,因为该文件正由另一进程使用。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IO.IOException: 该进程无法访问文件“L:\网站资料\Myweb\Sound\Upfiles\wav\2006\7\200678114111.wav”,因为该文件正由另一进程使用。
       Dim r As New System.IO.FileStream(fileName, System.IO.FileMode.Open) 这里报错!
      

  6.   

    谢谢大家啊!!不过我要是别的格式文件都要另存为呢?(如.wav  .mp3 .avi .rm )要怎么定义或如szc21(盼星星,盼月亮....) 说的那样子设置下载后缀??偶是新手啊,麻烦大家啦!!