Laravel Ajax 带预览的图片上传不起作用?
Laravel Ajax image upload with preview not working?
使用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');
处理上传和returns数据json格式的控制器。
这是控制器文件,我在其中声明了一些受保护的变量。
protected $view_path = 'backend.admin.jcrop';
protected $imagePath = '\public\uploads\jcrop';
protected $imageUrl = 'uploads\jcrop';
处理上传和returns json 数据格式的控制器函数..
public function store(Request $request)
{
if($request->hasFile('image')){
$image= $this->saveImage($request->file('image'));
我在这里做了一个简单的函数,叫做 saveImage() 上传图像和 returns 上传的文件
$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 中也是如此。请帮我解决这个问题?
我认为问题出在 saveImage()
return 上。尝试使用 url('/')
而不是 base_path()
。 base_path()
returns 服务器路径不是 URL.
$file= url('public/uploads/jcrop').$image->getFileName();
使用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');
处理上传和returns数据json格式的控制器。
这是控制器文件,我在其中声明了一些受保护的变量。
protected $view_path = 'backend.admin.jcrop';
protected $imagePath = '\public\uploads\jcrop';
protected $imageUrl = 'uploads\jcrop';
处理上传和returns json 数据格式的控制器函数..
public function store(Request $request)
{
if($request->hasFile('image')){
$image= $this->saveImage($request->file('image'));
我在这里做了一个简单的函数,叫做 saveImage() 上传图像和 returns 上传的文件
$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 中也是如此。请帮我解决这个问题?
我认为问题出在 saveImage()
return 上。尝试使用 url('/')
而不是 base_path()
。 base_path()
returns 服务器路径不是 URL.
$file= url('public/uploads/jcrop').$image->getFileName();