首页 > 解决方案 > 将 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'));

标签: javascriptd3.jslaravel-5

解决方案


因此,我查看了应该打印我的 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 值,然后在页面中接收它。感谢任何花时间阅读本文的人。


推荐阅读