【问题标题】:Laravel Ajax image upload with preview not working?带有预览的 Laravel Ajax 图像上传不起作用?
【发布时间】:2017-04-03 18:24:18
【问题描述】:

使用 Laravel Form Facade 上传图片的表单

{{Form:: open(['route'=>'jcrop.store', 'method'=>'post','id'=>'upload','role'=>'form-role', 'enctype'=>'multipart/form-data'])}}
 @include('backend.admin.jcrop.general._form',['submitButton'=>'Save Values'])
{{Form:: close()}}

包含的表格...

<div class="form-group">
    {{Form:: label('title','Title')}}
    {{Form:: text('title',null,['placeholder'=>'Enter Title', 'class'=>'form-control'])}}
</div>
<div class="form-group">
    {{Form:: label('rank','Rank')}}
    {{Form:: number('rank',null,['placeholder'=>'Enter Rank', 'class'=>'form-control'])}}
</div>
<div class="form-group">
    {{Form:: label('image','Image')}}
    {{Form:: file('image',null,['placeholder'=>'Enter Rank', 'class'=>'form-control', 'id'=> 'image'])}}
</div>
<div class="form-group">
    {{Form:: label('status','Status:')}}
    {!! Form::radio('status', '1', 'true')!!} Active
    {!! Form::radio('status', '0')!!} De-Active
</div>

{{Form:: button($submitButton,['class'=>'btn btn-primary','type'=>'submit'])}}
{{Form:: button('Reset',['class'=>'btn btn-danger','name'=>'reset','type'=>'reset'])}}

使用malsupform插件上传图片的脚本。

<script type="text/javascript">
    $("document").ready(function(){
        var options= {
            beforeSubmit: showRequest,
            success:    showResponse,
            dataType: 'json'
        };
            $("#image").change(function(){
            $("#upload").ajaxForm(options).submit();
        });
    });

    function showRequest(formData, jqForm, options){
        $("#validation-errors").hide().empty();
        return true;
    }

    function showResponse(response, statusText, xhr, $form){
        if(response.success==false)
        {

            var arr= response.errors;
            $.each(arr, function(index, value){
                if(value.length=!0){
                    $("#validation-errors").append('<div class="alert alert-danger">+value+</div');
                }
            });
            $("#validation-errors").show();
        }else{
            console.log(response.file);
            $("#output").html("<img src='"+response.file+"'/>");
        }
    }
</script>

处理上传和存储方法的路由。

Route::resource('jcrop', 'Admin\JcropController');

Controller 负责处理上传并返回数据的 json 格式。

这是我声明了一些受保护变量的控制器文件。

protected $view_path    = 'backend.admin.jcrop';
protected $imagePath    = '\public\uploads\jcrop';
protected $imageUrl     = 'uploads\jcrop';

处理上传并返回数据的json格式的控制器函数..

public function store(Request $request)
    {
      if($request->hasFile('image')){
            $image= $this->saveImage($request->file('image'));

这里我做了一个简单的函数叫 saveImage() 上传图片并返回上传的文件

            $file= base_path(). $this->imagePath.'/' .$image->getFileName();
            if($image){
                return response()->json(['success'=>'true', 'file'=>$file]);
        }
      }
         }

处理上传的函数是...

protected function saveImage($image)
    {
        $filename= $image->getClientOriginalName();
        $filename= pathinfo($filename, PATHINFO_FILENAME);
        $file= $filename. '.' .$image->getClientOriginalExtension();
        $upload= $image->move(base_path().$this->imagePath, $file);
        return $upload;
    }

一切正常,除了当我看到返回数据时

        Not allowed to load local resource:

在 chrome 和 FireFox 中也是如此。请帮我解决问题?

【问题讨论】:

    标签: javascript ajax laravel image-uploading malsup-ajax-form


    【解决方案1】:

    我认为问题出在saveImage() 返回。尝试使用url('/'),而不是base_path()base_path() 返回服务器路径而不是 URL。

    $file= url('public/uploads/jcrop').$image->getFileName();
    

    【讨论】:

    • 是的,它有效,但在视图中图像仍未加载,当检查图像时,我在 chrome 控制台上看到图像未找到,单击它以在新选项卡上查看时,我找不到 http 异常.....这是什么原因???
    • @Ravi 你能提供一下图片网址是什么样子的吗
    • laravelproject.dev/public/uploads/jcrop/{filename}
    • @Ravi 您是否仔细检查了文件夹中是否存在文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2012-11-23
    • 2017-10-31
    • 1970-01-01
    相关资源
    最近更新 更多