【问题标题】:convert HTML canvas content to send it angular form data request on laravel backend转换 HTML 画布内容以在 laravel 后端发送角度表单数据请求
【发布时间】:2015-12-28 11:19:41
【问题描述】:

我的将数据 url 转换为 blob 并发送到表单请求的 js 代码是

                 var canv=document.getElementById("mainCanvas");
             // var dataURL = canv.toDataURL();
              var dataURL = canv.toDataURL('image/jpg');

              // .replace("image/png", "image/octet-stream");
              documentData={"image":dataURLtoBlob(dataURL),"gameName":"emperor","userId":'userId',"gameId":56};
              Game.post(documentData).success(function(response){
                console.log(response);
              });

创建一个blob函数

    function dataURLtoBlob(dataurl) {
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], {type:mime});
}

我的角度服务工厂

services.factory('Game', ['$http', function($http){
return {

        get:function(){
            return;
        }

    ,   post:function(documentData){
                return $http(               
                { method: 'POST',
                  url: 'public/Game/store',
                  headers:   {   'content-type': 'multipart/form-data'},
                  data: documentData
         });
        }
    ,

        delete:function(){
            return ;
        }

};

}]);

laravel 后端

               $image=$request->file('image');


             $image->move("game/".$request->gameName."/play/" ,$request->userId.$request->gameId.".jpg");
             return Response(["success"=>true]);

我反复收到此错误提示

不能在非对象上调用移动

我对将dataurl转换为blob的代码没有信心我想做的是将dataurl转换为图像文件以形成数据请求

【问题讨论】:

  • 有趣的问题 - 你能 dd$image 变量并粘贴内容吗?
  • 我应该为你做吗,你还在吗,因为有些人刚刚回答?

标签: javascript java php angularjs laravel


【解决方案1】:

你可以提交到 php 只是 canvas dataURL 然后用 file_put_contents() 像这样保存它

/*JS - add this code in js in laravel view*/
// take data from canvas
var dataURL = canvas.toDataURL();

/*JS - add this code in js in laravel view*/
// preparing data without any dataURLtoBlob conversion
documentData={"image":dataURL,"gameName":"emperor","userId":'userId',"gameId":56}

/*JS - add this code in js in laravel view*/
// you can also remove headers: {'content-type': 'multipart/form-data'},
// from your Ajax
$http({ 
      method: 'POST',
      url: 'public/Game/store',
      data: documentData
});

/*PHP - laravel backend save form controller*/
//then simply save it as image
file_put_contents( 
     $request->userId.$request->gameId.".jpg",
     base64_decode($request->image) 
);

重要:是在保存之前对图像数据调用base64_decode()

【讨论】:

  • 我想你错过了我的意思,因为我在前端没有使用 php,所以我怎么能使用这个代码
  • 你不需要frontend的php你可以像现在使用角度js一样处理你的画布工作人员获取它的数据,然后将它提交到服务器端并保存它你需要使用php仅在保存步骤中,我通过添加 JSPHP 标签 更新了我的答案
  • 它对我不起作用,好吧,我们为什么要调用 base64_decode(),你可以使用 laravel api 像 file.Move() 来做到这一点,而不是 putcontents
  • 可能我们在某些时候遗漏了一些东西给你var_dump($request->userId.$request->gameId.".jpg") - is it correct image name?var_dump($request->image) - douse it contain any data ?我们称之为base64_decode()作为从画布base64编码中获取的数据,次要我们不能调用laravel' s Move() 作为从表单提交的数据不是正确的图像数据,因为它不包含 tmp_name,name,size ...作为标准提交的图像包含它只是从画布获取的图像数据
  • 这里是 vardump 输出“multipart/form-data POST 数据中缺少边界”,但 dataUrl 确实包含图像内容(我已经测试过),可能是什么错误。我假设它的请求和 dataurl 问题,因为要在表单中请求应该是文件权
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多