Laravel从给定图像URL的Javascript上传图像

时间:2018-06-22 10:23:57

标签: javascript php html ajax laravel

我有一个javascript中的图像URL,它是从html画布中提取的,我想从该URL创建图像并将其上传到服务器中的存储文件中。 我可以将ajax发布请求中的Url发送到控制器中的sendImagetoController函数,或者是否有使用javascript的方法来实现。我的路由均已定义和测试。请帮助 我的display.blade.php。

VARCHAR

我的控制器方法

SELECT ATC.OWNER, ATC.TABLE_NAME, ATC.COLUMN_NAME
FROM all_tab_columns ATC
WHERE DATA_TYPE LIKE '%VARCHAR%'

3 个答案:

答案 0 :(得分:0)

如果您拥有可公开访问的网址,则可以这样使用它

public function moveToStorage(Request $request){
      $data = $request->all();
      $url = $data['file_url'] ; //file url that you have in javascript
      $contents = file_get_contents($url);
      $name = substr($url, strrpos($url, '/') + 1);
      Storage::put($name, $contents); 

      return 'hello';
}
  

或者如果您的文件发布为base64,请尝试

public function moveToStorage(Request $request){
      $data = $request->all();
      $file = $data['file_url']; //base64 encoded image
      $file = substr($file, strpos($file, ",")+1);
      $imgeData = base64_decode($file);
      $contents = file_get_contents($imgeData);
      Storage::put("test.png", $contents); 

      return 'hello';
}

答案 1 :(得分:0)

查看您的代码,看来您是想在实际呈现的图像之前发送。在sendImageToController()之后,您需要在load函数内移动renderCanvas()

此外,不需要所有formData东西。只需将.toDataURL()的结果原样发送到服务器,然后使用base64_decode()将其转换回图像即可。

以下是相关更改:

function load() {
  renderCanvas();
  sendImageToController(); // send to server AFTER rendering
}

var imgUrl;

function renderCanvas() {
  // ...
  imgUrl = (document.getElementById("heatMap").childNodes[0]).toDataURL();
  // ...
}

更短的AJAX代码:

function sendImageToController() {
  $.ajaxSetup({
    headers: {
      'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
    }
  });
  $.post("{{route('HeatMap.moveToStorage')}}", {
      heatmap: imgUrl  // global var set in renderCanvas()!!
    })
    .done(function(response) {
      console.log("correct");
      console.log(response);
    })
    .fail(function(e) {
      console.log("errrooooor");
      console.log(e);
    });
}

在服务器上,获取heatmap参数。

public function moveToStorage(Request $request){
  $heatmap = $request->input('heatmap');
  $base64 = explode(",", $heatmap)[1];
  $binary = base64_decode($base64);
  // store $binary data in PNG file
  return 'image saved successfully';

}

答案 2 :(得分:-1)

我在PHP中使用此方法,事实是文件本身通过变量$ _FILES()到达php,并且在主查询中不可见。

<?php
    putenv("upload_tmp_dir=/var/www/site.com/public_html/upload/");
    $uploadDir = getenv("upload_tmp_dir");
    $uploadFile = $uploadDir . basename($_FILES['userfile']['name']);
    move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadFile);
?>

然后,您可以在$ uploadFile变量的路径中打开文件