【问题标题】:Pass file contents to a function instead of downloading the file将文件内容传递给函数而不是下载文件
【发布时间】:2017-12-11 00:22:19
【问题描述】:

我正在使用 Nightmare 以便从 Web 服务自动下载用户特定生成的 csv 文件,如下所示(粗略的工作流程):

  1. .goto()网站
  2. .insert() 凭据和.click() 登录按钮
  3. .wait() 用于加载所需的 DOM 元素
  4. 抓取登录页面以提取一些特定于请求的标识符,这是为我感兴趣的文件生成下载链接所必需的
  5. export.php 端点上调用.goto() 并使用其他一些参数来下载csv 文件。由于会显示 Nightmare 的 Electron 窗口,因此系统会要求我提供将文件存储到的路径。

目前,一般的整体工作流程如下所示:

  1. 使用 Nightmare 下载(并保存)文件
  2. 使用readFileSync()将文件读入字符串
  3. 使用data-forge-jspandasjsd3-dsv分析数据

通过将文件的内容直接传递给数据分析,我想摆脱在步骤 1 中保存文件并在步骤 2 中读取该本地文件。我不想将原始 csv 文件存储在本地。由于我不想稍后在生产中启用 Nightmares Electron Window,因此我正在寻找一种将文件内容直接传递给数据处理函数并摆脱那些不必要的步骤的方法。

【问题讨论】:

    标签: javascript node.js file download nightmare


    【解决方案1】:

    您可以使用 window.URL 对象方法来存储您的数据。以下内容检索二进制 blob,但您可以使用 content-types 和 response-types 来返回字符串。

            xmlhttp.open('GET', PHOTO_URL, true);
            xmlhttp.responseType = 'blob';
    
            xmlhttp.onreadystatechange = function () {
                if (xmlhttp.readyState == 4) {
                    if (xmlhttp.status == 200) {
                        var blob = xmlhttp.response;
                        photoImg.src = window.URL.createObjectURL(blob);
                        setTimeout(setOnCampusImage,0);     
                    } else {
                        photoImg.src = 'unknown.png';
                    }
                }
            }
    

    【讨论】:

    • 您能否进一步详细说明您的代码?这似乎是某个项目的 sn-p。根据您在回答中提供的信息,我无法对其进行适当调整以满足我的需求。
    • 你能发布你的代码吗?我不能 100% 确定你在尝试什么。
    猜你喜欢
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2019-05-25
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多