我有一个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%'
答案 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变量的路径中打开文件