【问题标题】:How do I download a file from external url to variable?如何将文件从外部 url 下载到变量?
【发布时间】:2013-08-04 17:24:19
【问题描述】:

好吧,getfile 可以用来从 SYSTEM 获取文件,但是,我如何下载 site.com/t.txt 呢?

我真的找不到,而且我发现的东西没有用,如果之前有人问过,请重定向我。

【问题讨论】:

  • 使用 ajax 的 GET 请求怎么样?
  • 你没有。 Javascript 具有同源策略!
  • 我认为您需要一个服务器端脚本。
  • @adeneo - 它有办法绕过它,尤其是 CORS。
  • @Quentin - 更值得注意的是 JSONP,但你不能只获得像 site.com/t.txt 这样的随机文件,除非 site.com 支持其中一个文件

标签: javascript


【解决方案1】:

在带有 XMLHTTPRequest 的现代浏览器中,您的要求非常简单。例如:

function load(url, callback) {
  var xhr = new XMLHTTPRequest();
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) callback(xhr.responseText);
  };
  xhr.open("GET", url, true);
}
load("site.com/t.txt", function (contents) {
  // contents is now set to the contents of "site.com/t.txt"
});

但是为了确保浏览器与 Internet Explorer 完全兼容,需要更多代码,因为 Internet Explorer 使用 ActiveXObject 而不是 XMLHTTPRequest。

function createXHR() {
  if (typeof XMLHTTPRequest === "undefined") {
    if (createXHR._version) return new ActiveXobject(createXHR._version);
    else {
      var versions = [
        "Micrsoft.XMLHTTP",
        "Msxml2.XMLHTTP",
        "Msxml2.XMLHTTP",
        "Msxml2.XMLHTTP.3.0",
        "Msxml2.XMLHTTP.4.0",
        "Msxml2.XMLHTTP.5.0",
        "Msxml2.XMLHTTP.6.0"
      ];
      var i = versions.length;
      while (--i) try {
        var v = versions[i], xhr = new ActiveXObject(v);
        createXHR._version = v;
        return xhr;
      } catch {}
    }
  } else return new XMLHTTPRequest();
}
function load(url, callback) {
   var xhr = createXHR();
   xhr.onreadystatechange = function () {
     if (xhr.readyState === 4 && xhr.status === 200) callback(xhr.responseText);
   };
   xhr.open("GET", url, true);
}

我真的建议使用 jQuery 之类的库来代替这个。欲了解更多信息

【讨论】:

  • 看来这个XMLHTTPRequest需要命名为XMLHttpRequest
【解决方案2】:

只要您不违反同源政策,这很容易。在这种情况下,如果您的脚本嵌入到来自 foo.com 的页面并请求文件 foo.com/* 而不是 subdomain.foo.com/*,则域匹配。

您只需要使用XMLHttpRequest 对文件发出 GET 请求并从响应中读取文件的内容。

如果文件在 foo.com 但页面不在,您需要在 foo.com 上托管脚本,然后使用 <script src="foo.com/filerequestscript.js"></script> 将其包含在此页面中。 (当然,如果你不控制 foo.com,这不太可能发生。)

【讨论】:

  • 使用脚本元素无法获取.txt文件,如果使用CORS,则可以使用XHR跨域获取文件。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
  • 2021-11-24
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
相关资源
最近更新 更多