FileReader返回undefined

时间:2018-05-22 23:12:50

标签: javascript

我尝试在我的网站中使用FileReader(),但它在数组中返回undefined。这是我第一次使用FileReader从我的输入文件发送编码数据。我正在使用Recruiterbox的API,正如您在打印中看到的那样,encoded_data未定义。我被困在这里,需要一些帮助。 enter image description here

applyOpening: function applyOpening() {

    function getBase64(file) {
      return new Promise(function(resolve) {
        var reader = new FileReader();
        reader.onloadend = function() {
          resolve(reader);
        }
        reader.readAsDataURL(file);
      })
    }

    let fields = [];
    let formControl = document.querySelectorAll('.form-control');

    for (var i = 0; i < formControl.length; i++) {

      let field = formControl[i];

      let obj = {
        key: field.getAttribute('name')
      }

      if (field.tagName.toLowerCase() === 'input' && field.getAttribute('type') === 'file' ) {
        if (field.files[0]) {
          getBase64(field.files[0]).then(function(reader) {
              obj.value = {
                'encoded_data': reader.result,
                'file_name': field.value.replace("C:\\fakepath\\", "")
              };
          });
        }
      } else {
        obj.value = field.value;
      }
      if (obj.key !== null) {
        fields.push(obj);
      }
      console.log(obj);
    }

    app.postApplyOpening(fields);

更新

applyOpening: async function applyOpening() {

  function getBase64(file) {
    return new Promise(function(resolve) {
      var reader = new FileReader();
      reader.onloadend = function() {
        resolve(reader);
      }
      reader.readAsDataURL(file);
    })
  }

  let fields = [];
  let formControl = document.querySelectorAll('.form-control');

  for (var i = 0; i < formControl.length; i++) {

  let field = formControl[i];

  let obj = {
    key: field.getAttribute('name')
  }

  if (field.tagName.toLowerCase() === 'input' && field.getAttribute('type') === 'file' ) {
    if (field.files[0]) {
      let reader = await getBase64(field.files[0]);
      obj.value = {
        'encoded_data': reader.result.replace(new RegExp("^data:[A-Z]+/[A-Z]+;base64,", "gi"), ''),
        'file_name': field.value.replace("C:\\fakepath\\", "")
      };
    }
  } else {
    obj.value = field.value;
  }
  if (obj.key !== null) {
    fields.push(obj);
  }
  console.log(obj);
}

app.postApplyOpening(fields);
},

控制台日志:

console

请求有效负载:

request payload

更新2:

&#13;
&#13;
Sub ApacheGetCopyOfLogList()
    Sheets("Sheet8").Range("B5:B92").Copy _
        Destination:=Sheets("Sheet10").Range("B5")
End Sub
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

FileReader异步返回结果。使用promise以异步方式获取结果。你不能返回readAsDataURL的结果,这是未定义的,这就是你所看到的。

见这里:Javascript base64 encoding function returns undefined