【问题标题】:Send blob from .js file to php with ajax [duplicate]使用ajax将blob从.js文件发送到php [重复]
【发布时间】:2014-07-09 05:50:53
【问题描述】:

所以我设置了一个页面,需要将 blob 变量发送到 php 页面。然后 php 页面使用 pdo 将 blob 上传到 mysql。我设置了ajax,所以它只发送一个文本变量并上传它就好了。但是,当我尝试做 blob 时,它不会起作用。

主页

    var blob = new Blob(["i am a blob"]);

   $.ajax({

      type: 'POST',
      url: 'test.php',
      data: {roll: blob},
    });

php页面

$got = $_POST['roll']; //gets the variable

$pdo = new PDO('mysql:host='. $host .';dbname='.$db_name, $db_username, $db_password);
    $query = $pdo->prepare('INSERT INTO books (test,rec) VALUES (?,?)'); 
    $query->bindValue(1, '35');
    $query->bindValue(2, $rollv);
    $query->execute();

【问题讨论】:

    标签: javascript php jquery ajax blob


    【解决方案1】:

    目前,JavaScript 并不是处理二进制数据的最佳语言。它正在广泛改进,但仅限于现代浏览器(最值得注意的是,只有 IE10+ 和移动支持有时是部分的)。

    因此,您可以使用 XHR2 (browser support) 发送二进制数据。使用 XHR2 非常简单,您可以在这里阅读一篇非常好的文章:http://www.html5rocks.com/en/tutorials/file/xhr2/。 如果你真的需要使用 jQuery 来管理异步请求,那么你需要使用 FormData 和这里解释的技巧:https://stackoverflow.com/a/13333478/192024

    PS:将 blob 数据存储到 MySQL 数据库时要小心,因为有时可能会出现问题,尤其是大文件!

    【讨论】:

      【解决方案2】:

      你可以试试这样的。

      var data;
      var blob = new Blob(["i am a blob"]);
      
      var reader  = new FileReader();
      
      reader.onloadend = function () {
          data = reader.result;
      
          $.ajax({
            type: 'POST',
            url: 'test.php',
            data: {roll: data},
          });
      }
      
      reader.readAsDataURL(blob);
      

      【讨论】:

      • 这将向服务器发送 Base64 编码的数据表示,但不是原始二进制数据
      • 我可以检索 Base64 并转换它吗?还是会扭曲文件?
      • @SolidCloudinc 你可以这样做并且不会扭曲文件。但是请记住,这会产生很多开销:与 base64 进行转换的处理时间、内存使用量等。此外,base64 编码的字符串要大约 33%,因此它也使用更多带宽。 (PS:记得在cmets中标记我!)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多