【问题标题】:manipulate body of file object after browser upload浏览器上传后操作文件对象的主体
【发布时间】:2016-03-16 21:58:03
【问题描述】:

在将文本file 上传到浏览器时,我想检查文件内容并在必要时对其进行操作,然后再将其发送到 Web 服务。

其他详情:

我正在上传标准化的 csv 文件,我想添加包含元信息的第一行,以防它丢失。之后,我将 csv 反序列化为 json 对象数组,而属性以元信息命名。

编辑 1:添加代码、库和框架信息

我正在使用流星,我使用papaparse 将数据从 csv 转换为 json。

查看:

  input(type='file' name='import idx' class='myFileInput')

JS:

'change .myFileInput': function(event, template) {
  FS.Utility.eachFile(event, function(file) {
    console.log(file); // works; contains a FILE object
    // TODO: check if file has a valid structure & add the meta data if it's missing
    var REObjects = Papa.parse(file, {              
        delimiter: "#",
        header: true,
        complete: function(results, file) {
            console.log("Parsing complete:", results, file); // works, contains JSON data
        }
    });
 });

【问题讨论】:

  • 等等,你是发送 CSV 还是 JSON 到服务器?
  • JSON(我上传了csv文件并转换成json)
  • 您在 JSON.parse() 之前将它作为一个字符串,对吗?只需在 parse()ing 之前检查该字符串并在需要时添加头部
  • 实际上我正在使用一个名为 papaparse 的第 3 方库将数据从 csv 转换为 json,所以我不确定我是否可以在某个时候挂钩..
  • 你不能。您使用 FileReader 获取文件(这实际上是一个装饰的 Blob),然后进行一些更改,然后使用结果创建一个新的 Blob,并将其提供给您期望文件的东西。如果您需要模拟输入,只需使用{files:[myBlob]}

标签: javascript json file csv


【解决方案1】:

这对我有用。

'change .myFileInput': function(event, template) {
  FS.Utility.eachFile(event, function(file) {
    console.log(file); // works; contains a FILE object

    // declare the first line of the file object
    var metaInfo = "some#delimited#meta#info#";

    var blob = new Blob([],  {type: "text/plain"});

    // construct blob object        
    blob = new Blob([blob, metaInfo], {type: "text/plain"});
    blob = new Blob([blob, file], {type: "text/plain"});

    // pass blob to parser library
    var REObjects = Papa.parse(blob, {              
        delimiter: "#",
        header: true,
        complete: function(results, file) {
            console.log("Parsing complete:", results, file); // works, contains JSON data using the metaInfo as attribute names
        }
    });
 });
}

特别感谢 dandavis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2011-03-06
    • 2014-02-11
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多