【问题标题】:Send blob from js form with axios, get it with php and insert it in mysql db用axios从js表单发送blob,用php获取并插入mysql db
【发布时间】:2022-01-24 12:46:34
【问题描述】:

搜索了一段时间后,我仍然卡住了,我需要帮助。

对于个人项目,我需要一个询问信息的 js 表单以及一张照片。 js 脚本允许选择照片的一部分并将照片转换为正确的大小和扩展名(首先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 什么也没收到和/或在 db 中插入一个空 blob。

有谁知道我哪里出错了?

【问题讨论】:

  • 尝试使用FormData 而不是URLSearchParams
  • 我还会在 blob 参数中测试 javascript 传输到 php 的值。如果该值已经不正确,那么您就知道问题不在于 php 和 mysql
  • 我试过了,但是使用 FormData,我在 mysql blob 列中总是什么都没有。
  • 检查我发送的内容是个好主意。在 js 脚本中,在附加参数之前,我有一个 blob 对象,但在附加之后,我的值中有一个文件,然后 php 接收一个文件而不是 blob。在将文件插入 mysql 之前,我必须将文件转换为 blob。我尝试使用 file_get_contents 但尚未成功。感谢您的支持。

标签: javascript php mysql axios blob


【解决方案1】:

事实上,问题在于附加。 在追加之前,我有一个 blob 文件,但之后,我有一个文件,然后 PHP 脚本接收一个文件,并且无法将其插入到 mysql blob 列中。 由于我无法在我的服务器上使用 php 将文件转换为 blob,我最终选择使用文件保存而不是 mysql 并且它运行良好。

【讨论】:

  • 大多数人会说这是一个更优化的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 2021-07-21
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多