本来是一个同步上传的功能,后来需求变化,只能改成异步,
前端页面长酱紫的:
{{-- Upload File Modal --}}
<div class="modal fade" id="modal-file-upload">
<div class="modal-dialog">
<div class="modal-content">
<form id="file-upload-form" method="POST" action="/admin/upload/file"
class="form-horizontal" enctype="multipart/form-data">
<input type="hidden" id="file-upload" name="_token" value="{{ csrf_token() }}">
<input type="hidden" id="file-upload" name="folder" value="{{ $folder }}">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
×
</button>
<h4 class="modal-title">上传新的文件</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="file" class="col-sm-3 control-label">
文件
</label>
<div class="col-sm-8">
<input type="file" id="file" name="file">
</div>
</div>
<div class="form-group">
<label for="file_name" class="col-sm-3 control-label">
选择上传到的文件夹/命名并上传或直接命名并上传
</label>
<div class="col-sm-4">
<input type="text" id="file_name" name="file_name"
class="form-control">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">
取消
</button>
<button type="submit" class="btn btn-primary" onclick="handle_upload_image()" >
上传文件
</button>
</div>
</form>
</div>
</div>
</div>
其中别的都不重要的,主要是id=file id=file_name 这两个,还有最后的submit的按钮,原先重命名是在后端的控制器在存储过程中进行的:
public function uploadFile(UploadFileRequest $request)
{
$file = $_FILES['file'];
$fileName = $request->get('file_name');
$fileName = $fileName ?: $file['name'];
$path = str_finish($request->get('folder'), '/') . $fileName;
$content = File::get($file['tmp_name']);
$homes = home::where('image_name',$fileName)->get();
if($homes->count())
{
$error = "File already exists";
return redirect()
->back()
->withErrors([$error]);
}
$syncfileditle = home::create( [
'image_name'=>$fileName,
'show_image'=>0,
'webPath'=>$path
]);
$result = $this->manager->saveFile($path, $content);
if ($result === true) {
return redirect()
->back()
->withSuccess("文件 '$syncfileditle->image_name' 已上传");
}
$error = $result ? : "上传文件引发了一个错误";
return redirect()
->back()
->withErrors([$error]);
}
现在怕是只能再重新写一个控制函数,并且注册路由去实现一遍,问题是怎样实现异步上传图片呢?(AJAX具体怎么用,完全没有头绪QAQ)
使用canvas压缩图片然后ajax上传(这可是扒了生产上在跑的代码。。效果就是点击上传按钮--选择完图片--确定--图片开始上传至服务器--完成后返回图片路径到隐藏域中--最后将该隐藏域的路径保存到数据库即可):