http://www.cnblogs.com/smjack/archive/2009/02/26/1398748.html
在上面的博客中也出现了这个问题,但是这位前辈用的是后台跳转,在我这里不适用不安全。
我现在的问题就姑且算是上面的这个问题吧,因为实在是找不到其他的原因。
我先贴一下代码:
我现在用的是文件流的方式发送到客户端的,其他的分组发送与直接写入HTTP响应流不缓存等的方式我都试过了,由于代码太多就不上传了.
这几种实现的方法所产生的效果是一样的
我现在VS默认的浏览器是火狐,页面运行之后把 localhost地址粘贴到IE上,因为IE上的迅雷插件已开启,点击下载这时就分两种情况了:
1.下载代码在当前页面的.cs中:粘贴地址之后迅雷下载文件的后缀名是mp3但是里面的内容是当前的页面。
2.下载代码在.ashx一般处理程序中:粘贴地址之后下载的是正确的mp3文件,但是这个.ashx文件他访问了六次,这有可能与文件的大小有关。
还有第三种:直接默认IE浏览器,IE默认下载工具是迅雷,以IE运行时,不论代码是在当前页面还是在一般处理程序中下载的都是代码所在的那个页面 而不是mp3文件。
总结来说到目前为止唯一成功的一个是上面博客里的跳转文件地址,另一个也是跳转文件地址只不过是把地址改成base64编码变成迅雷下载地址的格式,但是这两种都是存在不安全的因素,所以现在就在想办法用文件流的方式可以通过迅雷下载..
1 string strfilepath = "files/mp3/wav_20140209210150.mp3"; 2 string strname = "newmp3.mp3"; 3 string filePath = Server.MapPath("files/mp3/wav_20140209210150.mp3"); 4 5 FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); 6 byte[] bytes = new byte[(int)fs.Length]; 7 fs.Read(bytes, 0, bytes.Length); 8 fs.Close(); 9 // context.Response.AddHeader("Content-Disposition", String.Format("attachment;filename=" + strname)); 10 context.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("wohecaoyan", System.Text.Encoding.UTF8)+".mp3"); 11 context.Response.AppendHeader("Content-Length", fl.Length.ToString()); 12 context.Response.ContentEncoding = System.Text.Encoding.Default; 13 context.Response.ContentType = "application/octet-stream"; 14 context.Response.Buffer = true; 15 context.Response.BinaryWrite(bytes); 16 17 context.Response.Flush(); 18 context.Response.End(); 19 20
转编码,这个就不用说了
filePath = "AA" + filePath + "ZZ"; string encode = ""; byte[] bytestwo = Encoding.GetEncoding(54936).GetBytes(filePath); try { encode = Convert.ToBase64String(bytestwo); } catch { encode = filePath; } context.Response.Redirect("thunder://" + encode);
现在就是想通过迅雷下载文件流传输方式的文件,不要跳转地址的,问题就是这么个问题,上面也都写了,求大神帮忙,发源码修改什么的都可以
http://pan.baidu.com/s/1mgDrBFq 这个是代码的地址,分享到网盘了