我不明白。我有以下 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 处理页面?
尝试添加这些 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);