json在上传多个图像时解码文件名并循环遍历

时间:2017-08-14 19:52:46

标签: php json

我正在使用插件(如果有的话,我会检查手册)已经json_encodes()上传多个图像时的文件名。到目前为止,我唯一的帮助只适用于一个图像。

$response = array();
$message = "";

$files = $_POST['files']; 

    foreach (json_decode($files) as $key => $value) { 

     $image = $value->file_name; 

} 


if($_POST['files'] == "[]") { 

    $message .= "At least one image required";  

    } 

    if($message) { 

        $response['success'] = false; 
        $response['message'] = $message; 

    } else { 

        $response['success'] = true; 
        $response['message'] = $image; 
    } 

    echo json_encode($response);

这是jquery / ajax

var uploader = $('.picker-uploader').uploader({
                upload_url: 'upload.php',
                file_picker_url: 'files.php',
                input_name: 'file',
                maximum_total_files: 5,
                maximum_file_size: 50009000,
                file_types_allowed: ['image/jpeg', 'image/png'],
                on_error: function(err) {
                    swal({
                        title: "Upload Failed",
                        text: err.messages,
                        type: "warning"
                    })
                }
            })

$( "#edit_pic" ).on("click", function(e) {
        e.preventDefault();
         var files = $('input[name="file"]').val();

        $.ajax({
            url: 'functions/add-support-images.php',
            type: 'POST',
            dataType: 'json',
            data: {files: files},
            beforeSend: function() {
                $( "#edit_pic" ).prop("disabled", true).html("Uploading...");
            },
        })

        .done(function(data) {
                if(!data.success) {
                console.log(data.message);

            } else {

                alert(data.message);
            }
    })

上传按钮位于标签中:

<div id="addimages" class="tab-pane">
    <div class="form-group">
        <p></p>
        <label>Additional Images</label>
        <p></p>
        <button type="button" class="picker-uploader btn btn-primary">Select images</button>
    </div>
    <p></p>
    <button type="submit" name="edit_pic" class="btn btn-fill btn-info" id="edit_pic">Update</button>
    <p></p>
    <div class="alert alert-danger" id="image_error"></div>
    <div class="alert alert-success" id="image_success"></div>
</div>
</div>

然后我再次想要json_encode(),但如果我选择多个文件,它只输出上次上传的文件。我还需要遍历$ image,但不知道如何实现。

1 个答案:

答案 0 :(得分:0)

现在只使用以下代码发送第一个输入字段的一个值:

var files = $('input[name="file"]').val();

尝试更改:

var files = $('input[name="file"]').val(); 

为:

var files = $('input[name="file"]').map(function() {
    return $( this ).val();
}).get();

修改

上传文件递归的代码工作正常,但是,您必须决定如何处理这些文件。您要么收集所有文件名,要么对这些文件执行某些操作。例如,如果要存储文件名,可以这样做:

$response = array();
$message = "";
$images = array();

$files = $_POST['files']; 

foreach (json_decode($files) as $key => $value) { 
    $images[] = $value->file_name; 
}

print_r($images) // This is to see the contents of the array

当你做的时候

$image = $value->file_name;

您要覆盖$image变量,该变量包含foreach循环加载的先前文件名。