提问者:小点点

上传Javascript对象(svgCrowbar输出)到Laravel 5.6服务器


SVG Crowbar的代码在这里,我正在使用它下载SVG,但我希望能够将它们上传到服务器上(只需单击一次)。我不知道D3之外的javascript。js,但我相信这是代码的对象创建和下载部分:

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撬杆创建的svg?(无需用户在下载后浏览文件进行上传)

事实上,它是一个对象,与文件相反,并且跨越了语言线,这让我困惑。

我已经尝试在一个单独的刀片文件中通过ajax实现这一点,但我仍然无法让它工作。我看到了关于这个的其他问题,他们的小提琴可以在我的浏览器中工作,但这对我不起作用。我一直从ajax收到错误消息,而不是它的成功消息。所有其他错误现在都消失了。我在“inspect element”中点击网络,一切都是状态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'));

共1个答案

匿名用户

所以我查看了我的ajax请求应该打印的错误信息,并将其粘贴到谷歌后,发现了这个SO问题,指出:

public function uploadGraph(Request $request)
{
    dd($request);
    session([ 'value' => $request->value]);
}

应该改变这一点:

public function uploadGraph(Request $request)
{
    return $request->all();
}

然后在控制台中传递值为“62”的控制台日志。我应该能够从SVG Crowbar传递url值,然后在页面中接收它。感谢所有花时间阅读本文的人。