【问题标题】:How to save JSON into a local file on my computer? Without nodeJS?如何将 JSON 保存到我计算机上的本地文件中?没有nodeJS?
【发布时间】:2021-03-11 23:19:06
【问题描述】:

我正在使用 Abstract 中的 IP 地理定位 API

$.getJSON("https://ipgeolocation.abstractapi.com/v1/?api_key=YOUR_UNIQUE_API_KEY", function(data) {
       console.log(data.ip_address);
       console.log(data.country);
   })

编辑:基本上我想创建一个文本文件,它将所有访问者的 IP 地址只保存到我的计算机上,因为我有源文件。

如何将每个用户的 data.ip_address 和 data.country 仅保存到我的本地计算机上,而不让用户单击并下载任何内容?将 JSON 保存到 texfile 中?该 JSON 请求位于我的 Github 页面的唯一一个 HTML 文件中。对于这个快速的静态项目,我只需要最简单的解决方案。我尝试过使用 require(fs),但我一直收到错误消息并读到我不能真正使用 nodeJS 来做我正在做的事情。

【问题讨论】:

  • 这段代码在哪里运行,您无法访问 NodeJS 或类似框架,但用户会访问此页面? JavaScript 没有与您的计算机文件系统交互的本地方式; 'fs' 是 NodeJS 提供的。
  • 这能回答你的问题吗? How can JavaScript save to a local file?
  • 我在 GitHub 页面上运行它,它可以为我托管它,我的用户名是 URL。 @JType
  • 也许我的问题措辞有误。我基本上想要保存到我的计算机上的所有访问者 IP 地址的 texfile。我不希望用户能够访问/下载 JSON。 @tevemadar
  • 如果我没记错的话,GitHub 页面只允许你运行客户端代码。所以你不能让它自动将数据保存到你的电脑上。为此,您需要一种服务器端语言。为了每个人的安全,客户端语言无法访问文件系统。

标签: javascript json abstract


【解决方案1】:

GitHub Pages 不支持服务器端语言,例如 PHP、Ruby 或 Python。

-- 来自docs,所以无法写入文件。 GitHub 页面提供静态内容,没有任何后端。
即使是这样,从隐私的角度来看,将用户的位置和 IP 收集到 GitHub 存储库中可能也不是最好的主意。

【讨论】:

    【解决方案2】:

    这是一个令人讨厌的 hack,但您可以运行它(在您的网站或控制台中):

    const win = window.open("", "Title", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=200,top="+(screen.height-400)+",left="+(screen.width-840));
    win.document.body.innerHTML = JSON.stringify(data);
    
    // So in your case
    $.getJSON("https://ipgeolocation.abstractapi.com/v1/?api_key=YOUR_UNIQUE_API_KEY", function(data) {
      const win = window.open("", "Title", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=200,top="+(screen.height-400)+",left="+(screen.width-840));
      win.document.body.innerHTML = JSON.stringify(data);
    })
    

    然后将打开的窗口作为 json 文件保存到本地计算机。

    【讨论】:

      【解决方案3】:

      Javascript 无法访问本地文件系统。您需要网络服务器和服务器端语言才能将内容保存到服务器的文件系统。

      我能想到的唯一解决方案是强制浏览器创建一个文件并将其显示为下载。比如:

      var text = data.ip_address;
          text += '\n';
          text += data.country;
      
      var filename = 'myData.txt';
      
      var blob = new Blob([text], {type: 'text/csv'});
      if(window.navigator.msSaveOrOpenBlob) {
          window.navigator.msSaveBlob(blob, filename);
      } else {
          var elem = window.document.createElement('a');
          elem.href = window.URL.createObjectURL(blob);
          elem.download = filename;        
          document.body.appendChild(elem);
          elem.click();        
          document.body.removeChild(elem);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-20
        • 2020-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-23
        • 2016-03-13
        • 2013-06-13
        相关资源
        最近更新 更多