ActiveXObject直接下载到HDD

时间:2014-08-26 02:09:23

标签: javascript jscript activexobject downloading

是否有可用于将源文件直接下载到硬盘的本机ActiveX对象或类似对象。目前我正在使用以下内容:

function downloadToFile(url, file) {
    var xhr = new ActiveXObject("msxml2.xmlhttp"), 
        ado = new ActiveXObject("ADODB.Stream");

    xhr.open("GET", url, false);
    xhr.send();
    if (xhr.status === 200) {
        ado.type = 1;
        ado.open();
        ado.write(xhr.responseBody);
        ado.saveToFile(file);
        ado.close();
    }
}

但由于以下几个原因,这感觉有点低效:

我目前正在使用两个对象代替可能是单个对象的对象。

整个响应存储在内存中,直到写入文件为止。在我用它来下载相当大的文件之前,这不是一个大问题。

备注/编辑
我在微软的MSScriptControl.ScriptControl中工作,所以许多基于Web的库都无济于事。

如果答案能够在收到数据时将数据写入文件,我不一定要查找单个对象。

1 个答案:

答案 0 :(得分:1)

的bitsadmin

BITSAdmin是一个Windows命令行工具,用于使用Background Intelligent Transfer Service(BITS)下载和上传文件。

注意:在Windows 7中,BITSAdmin表示不赞成使用PowerShell BITS cmdlet,并且可能不会包含在将来的Windows版本中。

语法:

bitsadmin /transfer job_name url local_name

JScript版本:

var oShell = new ActiveXObject("WScript.Shell");
oShell.Run("bitsadmin /transfer myDownloadJob http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png C:\\Work\\wikipedia-logo.png");

.NET System.Net.WebClient类

如果您有.NET Framework,则可以为COM访问注册System.Net.WebClient类:

C:\Windows\Microsoft.NET\Framework\v4.0.30319> regasm System.dll

然后像这样使用它:

var strURL = "http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png";
var strFilePath = "C:\\Work\\wikipedia-logo.png";

var oWebClient = new ActiveXObject("System.Net.WebClient");
oWebClient.DownloadFile(strURL, strFilePath);

Chilkat HTTP库

Chilkat HTTP ActiveX library(商业广告)直接为您提供download个文件:

var strURL = "http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png";
var strFilePath = "C:\\Work\\wikipedia-logo.png";

var oHTTP = new ActiveXObject("Chilkat_9_5_0.Http");

//  Any string unlocks the component for the 1st 30-days.
var success = oHTTP.UnlockComponent("Anything for 30-day trial");
if (success != 1) {
  WScript.Echo(oHTTP.LastErrorText);
  WScript.Quit();
}

success = oHTTP.Download(strURL, strFilePath);
if (success != 1)
  WScript.Echo(oHTTP.LastErrorText);

卷曲

或者如何炮轰cURL(免费,MIT / X派生许可证)?虽然我猜它因WScript.Shell而被视为两个对象:

var oShell = new ActiveXObject("WScript.Shell");
oShell.Run("curl -o C:\\Work\\wikipedia-logo.png http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png");