【问题标题】:Convert image array to blob format and render with PHP将图像数组转换为 blob 格式并使用 PHP 进行渲染
【发布时间】:2017-02-12 11:14:28
【问题描述】:

我正在尝试将图像数组转换为 blob 格式并发送到脚本 php 以处理数据,但 blob 数组未正确发送,我不知道为什么。 我在 html 中的输入是这样的:

<div class="form-group">
<input id="imagen" onchange="send()" type="file" name="imgs" multiple="true" class="form-control required" >
</div>

我的 javascript 脚本是这样的:

<script>
    var y='#imagen';
    var z;        
    var blobs;
    function send(){
        x=trans(y); 
        };

    function trans(v) {
        var file    = document.querySelector(v).files;

        for (i = 0; i < file.length; i++) {
            var reader  = new FileReader();
            reader.readAsDataURL(file[i]);
            reader.onloadend = function () {
            blobs[i]=reader.result;
            }
        }
        console.log(blobs.length);

        }
</script>

我正在尝试通过 ajax 调用将数组 blob 发送到脚本 php:

var form = $('#for_addH')[0];
                var formData = new FormData(form);
                 formData.append("blobs",JSON.stringify(blobs));
                $.ajax({
                type: "POST",
                url: "phpfunc/posadas/nueva_habitacion.php",
                contentType:false,
                processData:false,
                cache:false,
                data: formData,
                timeout: 180000
            })

所以,我的问题是数组没有正确发送。请帮忙。

【问题讨论】:

    标签: javascript php arrays ajax


    【解决方案1】:

    您连接的是data URIs,而不是Blobs。

    如果实际需要发布串联data URIs 的字符串化数组,您可以使用立即调用的函数表达式。 FileReader loadend 事件异步返回结果。您可以将 i 传递给 IIFE,以在 for 循环中保留 i 引用

    function trans(v) {
        var file    = document.querySelector(v).files;
    
        for (i = 0; i < file.length; i++) {
          (function(curr) {
            var reader  = new FileReader();
            reader.readAsDataURL(file[curr]);
            reader.onloadend = function () {
              blobs[curr]=reader.result;
            }
          })(i);
        }
        console.log(blobs.length);
    
    }
    

    【讨论】:

    • 这是由您的建议返回的:Uncaught TypeError: Cannot read property 'length' of undefined Uncaught TypeError: Cannot set property '0' of undefined
    • send() 在哪里调用?为什么将form 传递给FormData() 然后调用.append()?您是否尝试将多个data URIs 的串联字符串发送到服务器?
    • 在图片中,通过事件onchange()
    • 是的,send 在哪里定义在javascript?可以创建一个stacksn-ps或者jsfiddlejsfiddle.net来演示吗?
    • blobsundefined。将blobs定义为数组var blobs = []jsfiddle.net/w0q80t2q/1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2011-08-31
    • 2017-07-17
    相关资源
    最近更新 更多