响应是空字符串

时间:2018-03-08 10:50:40

标签: laravel

我正在后端使用laravel创建一个简单的上传文件Web应用程序,我正在尝试打印从服务器发送的响应 - 应该在控制台中通知上传的文件,但它显示我一个空字符串。 这是我的控制器:

<?php
namespace App\Http\Controllers;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Storage;
class UploadsController extends Controller
{
    public function getUpload(){
        return view('upload');
    }
    public function postUpload(request $request){
// //        
       $result = print_r($request,true); 
        $time = Carbon::now();
        if ($request->hasFile('file')) {
            $file = $request->file('file');

            $extension = $file->getClientOriginalExtension();
            $fileName = $file->getClientOriginalName();

            //$upload_success = $file->storeAs('public',$file->getClientOriginalName());

            $upload_success=Storage::disk('local')->put($fileName, fopen($file, 'r+'));


            if ($upload_success) {

                return response()->json(['request'=>$request->getContent()], 200);
            }

            else {
                return response()->json('error', 400);
            }
        }
        return response()->json('no file to upload', 400);


    }

}

以及我在哪里打印回复:

<html>
   <head>
    <meta name="csrf-token" content="{{ csrf_token() }}">
      <title>upload</title>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
      <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
      <script src="/js/xhr2.js"></script>


      <script type="text/javascript">
         $(function(){
               $('#upload').on("click",function(){
                     $.ajaxSetup({
                         headers: {
                         'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                         }
                     });
                     $("#file").upload("/upload",function(data){
                       $('#spin').css('display','none');
                        $('#msg').css('display','block');
                        console.log(data);


                     },function(prog,val){
                      $('#prog').html(val+"%");
                      $('#prog').width(''+val+'%');
                      if(val == 100){
                        $("#prog").html('Completed');
                        $('#spin').css('display','block');
                      }


                     });
               });
         });

      </script>
   </head>
   <body>
    <div class="container">
    <div style="margin-top:5px"><input type="file" id="file" name="file" ></div>
    <div style="margin-top:5px;margin-bottom: 5px">
    <input type="button" id="upload" value="upload" class="btn btn-success btn-lg">
   </div>

    <div class="progress">
  <div class="progress-bar" role="progressbar" style="width: 0%;"  aria-valuemin="0" aria-valuemax="100" id="prog"></div>
</div>
<div id="spin" style="display:none">
<i class="fa fa-circle-o-notch fa-spin" style="font-size:24px"></i>
</div>
<div class="alert alert-success" style="display: none" id="msg" style="text-align: center">
  <strong>Success!</strong>You have uploaded the file successfully
</div>
  </div>
   </body>
   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</html>

以下是我得到的样本: empty response

我会知道我做错了,如果没有,为什么它是空的, 感谢。

1 个答案:

答案 0 :(得分:0)

您没有使用表单元素。 以基本的html格式包装您的输入:

<form method="POST" action="#">
    @csrf
    ...
</form>

然后使用jquery将表单发布到laravel路径。