【问题标题】:Response is empty string响应为空字符串
【发布时间】:2018-08-16 16:47:28
【问题描述】:

我正在后端使用 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>

这是我得到的示例:

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

【问题讨论】:

标签: laravel


【解决方案1】:

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

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

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

【讨论】:

  • 我不认为这是问题所在,请求在没有表单标签的情况下正常发送,并且文件也被存储。
  • 您为什么认为这不是问题?在大多数情况下,您不应该使用没有表单的输入。 Laravel 请求输入正文将是空的,没有 'multipart/form-data' 标头。然后你也可以只使用标准的 Laravel 方法来添加 csrf 而不是 标签(这也可能导致空正文)
猜你喜欢
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 2021-06-06
  • 1970-01-01
  • 2016-04-05
  • 2015-08-24
相关资源
最近更新 更多