使用 axios 从 js 表单发送 blob,使用 php 获取它并将其插入 mysql db
Send blob from js form with axios, get it with php and insert it in mysql db
搜索了一段时间,还是卡住了,需要帮助。
对于个人项目,我需要一个用于询问信息的 js 表单和一张照片。
一个 js 脚本允许 select 照片的一部分并将照片转换为正确的大小和扩展(首先是 cropper-js 和图像转换之后)。
有了这个,我就有了一个 blob 文件。
var params = new URLSearchParams();
params.append("data1", document.data1);
params.append("data2", document.data2);
params.append("data3", document.data3);
params.append("data4", document.data4);
params.append("blob", blob);
const config = {
headers: {
"Content-Type": "multipart/form-data",
},
};
axios.post(url_to_php_file, params, config).then((res) => {
console.log(blob);
}
在 console.log 中,我可以看到我的 blob 对象(如果我改变照片,大小也会改变)
Blob {size: 49759, type: 'image/jpeg'}
使用php,我插入mysql db
function fonctioninsert($table,$valeurs) {
global $bdd;
global $prefix_tables;
$requete = 'INSERT INTO '.$prefix_tables.$table.'(';
$i = 0;
foreach ($valeurs as $key => $value) {
if ($i != 0) {
$requete .= ',';
}
$requete .= $key;
$i++;
}
$i = 0;
$requete .= ') VALUE (';
foreach ($valeurs as $key => $value) {
if ($i != 0) {
$requete .= ',';
}
$requete .= "'".$value."'";
$i++;
}
$requete .= ')';
$req = $bdd->prepare($requete);
$req->execute();
//$req->closeCursor();
return $req;
}
$table = "table1";
unset($valeurs);
$valeurs = array(
"data1" => $_POST["data1"],
"data2" => $_POST["data2"],
"data3" => $_POST["data3"],
"data4" => $_POST["data4"],
"blob" => $_POST["blob"]
);
fonctioninsert($table,$valeurs);
进程在db中插入数据,但是blob列(LONGBLOB类型)还是和13o一样。尺寸,即使我改变照片。
我尝试使用 $_FILE 但在这种情况下,mysql blob 列中没有任何内容。
这就像 php 什么也没收到 and/or 在数据库中插入一个空 blob。
有人知道我错在哪里吗?
事实上,问题出在追加上。
在追加之前,我有一个 blob 文件,但在追加之后,我有一个文件,然后 PHP 脚本接收到一个文件并且无法将其插入 mysql blob 列。
由于我无法在我的服务器上使用 php 将文件转换为 blob,因此我最终选择使用文件保存来代替 mysql,并且效果很好。
搜索了一段时间,还是卡住了,需要帮助。
对于个人项目,我需要一个用于询问信息的 js 表单和一张照片。 一个 js 脚本允许 select 照片的一部分并将照片转换为正确的大小和扩展(首先是 cropper-js 和图像转换之后)。 有了这个,我就有了一个 blob 文件。
var params = new URLSearchParams();
params.append("data1", document.data1);
params.append("data2", document.data2);
params.append("data3", document.data3);
params.append("data4", document.data4);
params.append("blob", blob);
const config = {
headers: {
"Content-Type": "multipart/form-data",
},
};
axios.post(url_to_php_file, params, config).then((res) => {
console.log(blob);
}
在 console.log 中,我可以看到我的 blob 对象(如果我改变照片,大小也会改变)
Blob {size: 49759, type: 'image/jpeg'}
使用php,我插入mysql db
function fonctioninsert($table,$valeurs) {
global $bdd;
global $prefix_tables;
$requete = 'INSERT INTO '.$prefix_tables.$table.'(';
$i = 0;
foreach ($valeurs as $key => $value) {
if ($i != 0) {
$requete .= ',';
}
$requete .= $key;
$i++;
}
$i = 0;
$requete .= ') VALUE (';
foreach ($valeurs as $key => $value) {
if ($i != 0) {
$requete .= ',';
}
$requete .= "'".$value."'";
$i++;
}
$requete .= ')';
$req = $bdd->prepare($requete);
$req->execute();
//$req->closeCursor();
return $req;
}
$table = "table1";
unset($valeurs);
$valeurs = array(
"data1" => $_POST["data1"],
"data2" => $_POST["data2"],
"data3" => $_POST["data3"],
"data4" => $_POST["data4"],
"blob" => $_POST["blob"]
);
fonctioninsert($table,$valeurs);
进程在db中插入数据,但是blob列(LONGBLOB类型)还是和13o一样。尺寸,即使我改变照片。 我尝试使用 $_FILE 但在这种情况下,mysql blob 列中没有任何内容。
这就像 php 什么也没收到 and/or 在数据库中插入一个空 blob。
有人知道我错在哪里吗?
事实上,问题出在追加上。 在追加之前,我有一个 blob 文件,但在追加之后,我有一个文件,然后 PHP 脚本接收到一个文件并且无法将其插入 mysql blob 列。 由于我无法在我的服务器上使用 php 将文件转换为 blob,因此我最终选择使用文件保存来代替 mysql,并且效果很好。