为什么 javascript FormData 和 PHP 之间的交换不起作用?

问题描述 投票:0回答:1

我不明白。我有以下 JavaScript 函数,将 blob 对象发送到 PHP 端:

function createDownloadLink(blob,encoding) {

        fetch('https://localhost:443/process.php', {method: "POST", body: blob}).then( (response) => response.json() ).then( (aidata) => {

                textInputG.value = aidata.text;
        } );
}

在 PHP 方面,我使用以下代码捕获了 blob,一切都很简单:

<?php
    $data = file_get_contents('php://input');
    // PROCESSING HERE //
    $reply = array('text' => $text);
    echo json_encode($reply);
?>

现在的问题是我需要从 JavaScript 端发送多个对象,所以我尝试使用 FormData 修改函数,但在 PHP 端我无法读取 blob:

function createDownloadLink(blob,encoding) {

        const formData = new FormData();
        formData.append('blob', blob);
        formData.append('text', text);
 
        fetch('https://localhost:443/process.php', {method: "POST", body: formData}).then( (response) => response.json() ).then( (aidata) => {

                textInputG.value = aidata.text;
        } );
}

这在理论上是我期望的工作,但事实并非如此!

<?php
    $blob_data = $_FILES['blob'];  # THIS IS NOT READ CORRECTLY #
    $text_data = $_POST['text'];   # This works instead #
    // PROCESSING HERE //
 

我在 PHP 上收到的似乎不是 blob 的字节,而是 $_POST['blob'] 数组内的字符串“[object Blob]”,而 $_FILES['blob'] 数组内没有任何内容。

我做错了什么,如何解决这个问题?

我正在尝试获取 JavaScript blob 以及 PHP 端 FormData 中的文本。

这个问题不是“如何在 JavaScript 中将 Blob 转换为文件”的重复问题,那里发布的解决方案都不适合我。

在 fetch 方法中直接附加到 POST 正文时,blob 已经可以工作,但如果我尝试将其封装在 FormData 对象中,则不再工作。无论我是否将其转换为文件,绝对没有区别...有没有办法将 blob 对象正确传输到 PHP 处理页面?

javascript php post form-data
1个回答
0
投票

尝试添加这些 contentType 和 processData 选项,这是一个示例

let data = new FormData()
for (var x = 0; x < files.length; x++){
    data.append("file" + x, files[x]);
}
fetch(url, {
    method: 'POST',
    mode: 'cors',
    contentType: false,
    processData: false,
    body:  data
})
.then(parseResponse)
.then(resolve)
.catch(reject);
© www.soinside.com 2019 - 2024. All rights reserved.