javascript - 将 Javascript 对象(svgCrowbar 输出)上传到 Laravel 5.6 服务器
问题描述
SVG Crowbar 的代码在这里,我用它来下载 SVG,但我也希望能够将它们上传到服务器(单击一下)。我不知道 D3.js 之外的 javascript,但我相信这是代码的对象创建和下载部分:
var url = window.URL.createObjectURL(new Blob(source.source, { "type" : "text\/xml" }));
var a = document.createElement("a");
body.appendChild(a);
a.setAttribute("class", "svg-crowbar");
a.setAttribute("download", filename + ".svg");
a.setAttribute("href", url);
a.style["display"] = "none";
a.click();
在从 POST 请求中检索它们之后,我将以下内容用于 Laravel 文件上传:
{!! Form::file('file', array('class' => 'form-control')) !!}
问题:您将如何上传使用 SVG Crowbar 创建的 svg?(不让用户在下载后浏览文件上传)
它是一个对象,而不是文件,并且跨越了语言界限,这让我感到困惑。
更新
我已经通过 ajax 在一个单独的刀片文件中尝试了这个,但我仍然无法让它工作。我看到有关此的其他问题,他们的小提琴可以在我的浏览器中工作,但这对我不起作用。我不断收到来自 ajax 的错误消息,而不是它的成功消息。现在所有其他错误都消失了。我在“检查元素”中单击网络,一切都是状态 200,包括 xhr。
我还检查了 .env 文件和配置/会话,确保安全会话 cookie 设置为 false,我的服务器时间很好,我可以正常登录,我可以正常上传 Laravel 文件,其他一切都很好。我从浏览器中删除了 cookie 并再次登录,它仍然给出 ajax 错误而不是成功。
对于视图:
@extends('layouts.app')
@include('header') //just first html tag, linked scripts, navbar
<head><meta name="csrf-token" content="{{ csrf_token() }}"></head>
@csrf
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
var value = 62;
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
var data = { value : 63 };
$.ajax({
type: 'POST',
url: 'http://localhost/torphin/public/graphbuilder/upload',
processData: false,
contentType: false,
cache: false,
dataType: 'json',
data: { value : 63 },
success: function(data) {
console.log('Value added ' + value);
},
error: function(e) {
console.log('Error!', e);
}
});
</script>
@include('footer') //just footer, jquery, and bootstrap links
对于控制器:
public function uploadGet(Request $request)
{
return view('svgUpload');
}
public function uploadGraph(Request $request)
{
dd($request);
session([ 'value' => $request->value]);
}
对于路线:
Route::get('/graphbuilder/upload', array('uses' => 'Controller@uploadGet'));
Route::post('/graphbuilder/upload', array('uses' => 'Controller@uploadGraph'));
解决方案
因此,我查看了应该打印我的 ajax 请求的错误消息,并在将其粘贴到谷歌后,发现了这个 SO question,指出:
public function uploadGraph(Request $request)
{
dd($request);
session([ 'value' => $request->value]);
}
应该改变这个:
public function uploadGraph(Request $request)
{
return $request->all();
}
然后它在控制台中传递值“62”的控制台日志。我应该能够从 SVG Crowbar 传递 url 值,然后在页面中接收它。感谢任何花时间阅读本文的人。