|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
计算机发展到这个时候,很多技术日益成熟,想学好一种技术都是不容易的,当你学会用的时候你对它的很多原理可能很不了解)asp.net|技能|办理|下载关于下载时新翻开一窗口下载,下载完后必要封闭的
一种:关于较小文件能够无效:
System.IO.FileInfofile=newSystem.IO.FileInfo("F:mp3mp3别哭我最爱的人.mp3");
Response.Clear();
Response.ClearHeaders();
Response.Buffer=false;
Response.Charset="GB2312";
Response.ContentEncoding=System.Text.Encoding.UTF8;
Response.ContentType="application/octet-stream";
Response.AddHeader("Content-Disposition","attachment;filename="+Server.UrlEncode("别哭我最爱的人.mp3"));
Response.AddHeader("Content-Length",file.Length.ToString());
Response.WriteFile(file.FullName);
Response.Flush();
Response.End();
该代码能够完成输入文件并将新翻开的窗体封闭。
另外一种关于年夜文件,我们用上述代码不是较好,由于上述代码是将文件全缓存于服务器后才输入的,假如你的服务器流量年夜,且文件较年夜,不倡议用以上办法。
以下我测试过,较好能办理:
publicstaticboolResponseFile(HttpRequest_Request,HttpResponse_Response,string_fileName,string_fullPath,long_speed)
{
try
{
FileStreammyFile=newFileStream(_fullPath,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
BinaryReaderbr=newBinaryReader(myFile);
try
{
_Response.AddHeader("Accept-Ranges","bytes");
_Response.Buffer=false;
longfileLength=myFile.Length;
longstartBytes=0;
intpack=10240;//10Kbytes
intsleep=(int)Math.Floor(1000*pack/_speed)+1;
if(_Request.Headers["Range"]!=null)
{
_Response.StatusCode=206;
string[]range=_Request.Headers["Range"].Split(newchar[]{=,-});
startBytes=Convert.ToInt64(range[1]);
}
_Response.AddHeader("Content-Length",(fileLength-startBytes).ToString());
if(startBytes!=0)
{
_Response.AddHeader("Content-Range",string.Format("bytes{0}-{1}/{2}",startBytes,fileLength-1,fileLength));
}
_Response.AddHeader("Connection","Keep-Alive");
_Response.ContentType="application/octet-stream";
_Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(_fileName,System.Text.Encoding.UTF8));
br.BaseStream.Seek(startBytes,SeekOrigin.Begin);
intmaxCount=(int)Math.Floor((fileLength-startBytes)/pack)+1;
for(inti=0;i<maxCount;i++)
{
if(_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(pack));
Thread.Sleep(sleep);
}
else
{
i=maxCount;
}
}
_Response.Flush();
}
catch
{
returnfalse;
}
finally
{
br.Close();
myFile.Close();
}
}
catch
{
returnfalse;
}
returntrue;
}
这一种代码也是借签网上的
它也能够完成输入文件并封闭新翻开幕窗体
别的在测试傍边发明,服务器端与客户的操纵体系分歧
也会有一些意想不到的事变产生
一样平常来讲,用以上代码,如不克不及一般封闭,你能够查阅扫瞄器的设置,在初级中。
再者,你能够修正分歧的输入内容范例Response.ContentType="application/octet-stream";由于分歧的contenttype,在客户的真个注释多是纷歧样的。
有设法请复兴,接待会商
我实在想不明白java的机制,为什么非要那么蛋疼,在同一个平台下重复编译。 |
|