在 JavaScript 中为动态文件输入获取 FileReader 结果

阿克666

我是 JS 新手,我必须在工作中做一个功能,我不太清楚如何处理它。

我有一个表单,用户可以在其中动态添加项目并按下按钮。其中一个按钮允许添加输入以上传文件。为了方便起见,我将把 HTML 恢复为这样的:

原始 div 的形式是:

<div id="userContent">

</div>

当用户按下按钮时,它会添加元素,在这种情况下文件输入:

<div id="userContent">
    <div id="inputFile-1" class="customTabContent"> 
        <input id="file-1" type="file" required="required">
    </div>
    <div id="inputFile-2" class="customTabContent"> 
        <input id="file-2" type="file" required="required">
    </div>
    <div id="inputFile-3" class="customTabContent"> 
        <input id="file-3" type="file" required="required">
    </div>
</div>

当用户完成添加元素并按下按钮提交数据时,我读取 DOM 并查看创建用户的内容,首先我获得了父级:

var parent = document.getElementById('userContent');

然后,我遍历孩子,并为每个孩子我得到输入:

var input = document.getElementById('file-1');
var file = input.files[0];

然后我使用这个函数读取文件并返回base64中的值,使用closures获取值:

function getBase64(file) {
    var base64data = null;
    var fileReader = new FileReader();
    fileReader.onloadend = (function () {
        return function () {
            var rawData = fileReader.result;
            /* Remove metadata */
            var cleanedData = rawData.replace(/^data:(.*;base64,)?/, '');
            /* Ensure padding if the input length is not divisible by 3 */
            if ((cleanedData.length % 4) > 0) {
                cleanedData += '='.repeat(4 - (cleanedData.length % 4));
            }
            base64data = cleanedData;
        }
    })();
    fileReader.readAsDataURL(file);

    return base64data;
}

我的问题是,这家网站上,我得到一个错误,指出base64data它的null ,但如果我把一个断点return base64data;,在年底getBase64(file)的变量对BASE64的值,如果我释放调试器,我可以将值发送到服务器。

阅读文档,FileReader它是异步的,所以我认为问题似乎与它有关,但是我怎样才能实现我想要做的事情?我不知道为什么在调试器上我可以获得值,但在调试器之外没有。我很困....

问候。

PD:如果我不回答,那是因为我不在工作,所以很抱歉延迟回复。

-------- 编辑 1

多亏了Sjoerd de Wit我可以获得结果,但我无法分配给变量:

var info = {'type': '', 'data': ''};

........
} else if (it_is_a_file) {
    var file = input.files[0];
    var base64data = null;
    getBase64(file).then((result) => {
        base64data = result;
        info['type'] = 'file';
        info['data'] = base64data;
    });
} else if 
.......
return info;

但在info我得到{'type': '', 'data': ''}. 我用错了承诺?谢谢。

-------- 编辑 2

这个问题是因为作为 JavaScript 的菜鸟,我不知道使用 FLASK,您必须使用表单并以不同的方式获取数据。

因此,这个问题的答案是搜索如何从FORMwith获取数据FLASK

但是我会将答案标记为正确,因为您可以获得我所要求的价值。

德威特

您可以将函数转换为返回承诺,然后在加载时解析 base64data。

    function getBase64(file) {
    return new Promise((resolve, reject) => {
      var fileReader = new FileReader();

      fileReader.onloadend = (function () {
          return function () {
              var rawData = fileReader.result;
              /* Remove metadata */
              var cleanedData = rawData.replace(/^data:(.*;base64,)?/, '');
              /* Ensure padding if the input length is not divisible by 3 */
              if ((cleanedData.length % 4) > 0) {
                  cleanedData += '='.repeat(4 - (cleanedData.length % 4));
              }
              resolve(cleanedData);
          }
      })();

      fileReader.readAsDataURL(file);
    });
  }

然后你想在哪里阅读它,你可以这样做:

  getBase64(file).then((base64data) => {
    console.log(base64data);
  })

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取FileReader()的结果对象

来自分类Dev

将FileReader的结果转换为javascript对象

来自分类Dev

在Firefox中访问FileReader的部分结果

来自分类Dev

Javascript-获取FileReader的返回

来自分类Dev

如何从Javascript FileReader获取文件名?

来自分类Dev

javascript FileReader:预览多个文件中的图像

来自分类Dev

Javascript Filereader-文件类型检查

来自分类Dev

Javascript FileReader onload(从服务器获取文件)

来自分类Dev

FileReader加载结果和参数

来自分类Dev

在javascript中上传多个图像时,filereader结果顺序发生变化

来自分类Dev

如何使用FileReader在JavaScript中读取大型视频文件?

来自分类Dev

在Convert.FromBase64String中输入FileReader.readAsDataURL结果返回格式异常

来自分类Dev

如何从Java中的JavaScript文件获取结果

来自分类Dev

Javascript FileReader:提取文本

来自分类Dev

有没有办法使用JavaScript中的FileReader获取文件的特定部分?

来自分类Dev

如何使用JavaScript FileReader检测文件扩展名

来自分类Dev

如何使用Javascript FileReader()打开本地文件

来自分类Dev

javascript FileReader如何知道要读取哪个文件?

来自分类Dev

JavaScript:为什么无法在mozilla中调用FileReader.onload?

来自分类Dev

JavaScript FileReader中的readAsDataURL()和readAsArrayBuffer()以及readAsText()之间的区别

来自分类Dev

从 JavaScript 结果中获取 responseJson

来自分类Dev

如何从“多重输入”中的FileReader函数获取文件名?

来自分类Dev

在javascript中查询结果

来自分类Dev

Python REST解码FileReader :: readAsDataURL的结果

来自分类Dev

Javascript FileReader onload无法触发

来自分类Dev

Safari的javascript fileReader替代(<6)

来自分类Dev

javascript FileReader获得名称?

来自分类Dev

Safari的javascript fileReader替代(<6)

来自分类Dev

Javascript Filereader按名称排序

Related 相关文章

  1. 1

    获取FileReader()的结果对象

  2. 2

    将FileReader的结果转换为javascript对象

  3. 3

    在Firefox中访问FileReader的部分结果

  4. 4

    Javascript-获取FileReader的返回

  5. 5

    如何从Javascript FileReader获取文件名?

  6. 6

    javascript FileReader:预览多个文件中的图像

  7. 7

    Javascript Filereader-文件类型检查

  8. 8

    Javascript FileReader onload(从服务器获取文件)

  9. 9

    FileReader加载结果和参数

  10. 10

    在javascript中上传多个图像时,filereader结果顺序发生变化

  11. 11

    如何使用FileReader在JavaScript中读取大型视频文件?

  12. 12

    在Convert.FromBase64String中输入FileReader.readAsDataURL结果返回格式异常

  13. 13

    如何从Java中的JavaScript文件获取结果

  14. 14

    Javascript FileReader:提取文本

  15. 15

    有没有办法使用JavaScript中的FileReader获取文件的特定部分?

  16. 16

    如何使用JavaScript FileReader检测文件扩展名

  17. 17

    如何使用Javascript FileReader()打开本地文件

  18. 18

    javascript FileReader如何知道要读取哪个文件?

  19. 19

    JavaScript:为什么无法在mozilla中调用FileReader.onload?

  20. 20

    JavaScript FileReader中的readAsDataURL()和readAsArrayBuffer()以及readAsText()之间的区别

  21. 21

    从 JavaScript 结果中获取 responseJson

  22. 22

    如何从“多重输入”中的FileReader函数获取文件名?

  23. 23

    在javascript中查询结果

  24. 24

    Python REST解码FileReader :: readAsDataURL的结果

  25. 25

    Javascript FileReader onload无法触发

  26. 26

    Safari的javascript fileReader替代(<6)

  27. 27

    javascript FileReader获得名称?

  28. 28

    Safari的javascript fileReader替代(<6)

  29. 29

    Javascript Filereader按名称排序

热门标签

归档