最近在做的项目基于laravel开发,需要用到ajax上传,查了些资料,自己整理了下可用的方法。下面这篇文章主要给大家介绍了关于利用laravel+ajax实现文件上传功能的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
前言
大家都知道,早期的xmlhttprequest不支持文件上传,一般用第三方js插件或者flash,现在可以借助xmlhttprequest level 2 的formdata对象实现二进制文件上传,正好最近工作中遇到了这个需求,所以本文就来给大家总结下实现的方法,话不多说了,来一起看看详细的介绍吧。
示例代码
@extends('layouts.art')
@section('content')
<form class="form-horizontal" id="avatar">
{{ csrf_field() }}
<p class="form-group">
<label for="inputemail3" class="col-sm-2 control-label">名字</label>
<p class="col-sm-8">
<input type="title" class="form-control" id="title" name="title">
</p>
</p>
<p class="form-group">
<label for="inputemail3" class="col-sm-2 control-label">头像</label>
<p class="col-sm-8">
<input type="file" class="form-control" id="title" name="photo">
</p>
</p>
<p class="form-group">
<p class="col-sm-offset-2 col-sm-10">
<a class="btn btn-default" onclick="uploadinfo()">上传</a>
</p>
</p>
</form>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
function uploadinfo() {
var formdata = new formdata($("#avatar"));
$.ajax({
url: "{{url('photo')}}",
type: 'post',
data: formdata,
contenttype: false,
processdata: false,
success: function (returndata) {
console.log(returndata);
},
error: function (returndata) {
console.log(returndata);
}
});
}
</script>
@endsection
//生成路径,图片存储
$ext = $request->photo->getclientoriginalextension();
$cover_path = "images/album/covers/" . time() . $ext;
$name = "photo".time();
$src = "images/album/photos/". $name .".jpg";
image::make($request->photo)->save(public_path($src));*/
//批量上传图片
foreach ($request->photo as $key => $value) {
//生成路径,图片存储
$prefix = "photo".mt_rand(1,1000);
$origname = $value->getclientoriginalname();
$name = $prefix.$origname;
$src = "images/album/photos/".$name;
$realpath = $value->getrealpath();
storage::disk('uploads')->put($src,file_get_contents($realpath));
}
以上就是laravel+ajax完成文件上传功能的详细内容。