<%
'Code By oday
url =Trim(Request.QueryString("url")) '注意URL路径上的文件不能是被IIS解析的,如.txt就不行,要用的话自己改个后缀
fname=Trim(Request.QueryString("fname"))
if url <>"" then 'and fname<>"" then
Set xPost = CreateObject("Microsoft.XMLHTTP")
xPost.Open "GET",url,False
xPost.Send()
Set sGet = CreateObject("ADODB.Stream")
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile Server.MapPath(".")&"/"&fname,2
set sGet = nothing
set sPOST = nothing
response.Write("下载成功!<br>")
end if
%>
test.asp
<script>
location.href="download1.asp?url="+escape("http://58.211.102.206/hi/流行音乐/青花瓷.mp3")+"&fname=demo.mp3"
</script>
现在 这个可以运行了!!原来那个 ajax 有点问题!
以下是我自己的一个公共方法,请参考。
首先要添加命名空间引用
using System.IO
FileName是自定义要下载的文件的名称
FilePath是文件的实际存放路径
public static void DownloadFile(string FileName, string FilePath){
FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read)
byte[] buffer = new byte[fs.Length]
int totalLength = (int)fs.Length
int totalReadLength = 0
while (totalLength > 0)
{
int readLength = fs.Read(buffer, totalReadLength, Math.Min(totalLength, int.MaxValue))
if (readLength == 0)
{
break
}
totalReadLength += readLength
totalLength -= readLength
}
fs.Close()
HttpContext.Current.Response.Charset = "UTF-8"
HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment filename=" + FileName))
HttpContext.Current.Response.BinaryWrite(buffer)
HttpContext.Current.Response.OutputStream.Flush()
HttpContext.Current.Response.End()
}
嗯,这个其实就是一个超链接连过去就行了。要知道远程文件的url就可以。比如说:<a href="http://www.rarlab.com/rar/wrar393.exe">下载</a>
或是用js打开远程文件的url。
一般来说迅雷都能够捕捉到的,但并不能100%确保(谁都不能确保)
缺点:远程文件如果设置了防盗链,就没用了
如果你说的“远程服务器”是内网的,那没办法做到的
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)