我正在为个人项目制作一个管理面板,作为研究laravel框架的一种方式,到目前为止,我很喜欢它!
我遇到一个问题,我不知道如何将上传的图像存储到我的应用程序中(尽管不太安全,但我想使用公用文件夹而不是其他存储),我在公用文件夹中有名为上载的文件夹。
这是我的AJAX POST呼叫:
$('.form_store_button').click(function(){
var linked_entry = $(this).attr("data-link");
var form = $(this).closest('form');
$.ajaxSetup({
headers: { 'X-CSRF-Token' : $('meta[name=csrf-token]').attr('content') }
});
switch(linked_entry) {
case "sliders":
console.log('new slider button clicked');
var formData = new FormData();
formData.append('title', form.closest($("input[name='title']").val()));
formData.append('body', form.closest($("textarea[name='body']").val()));
formData.append('image', form.closest($("input[name='image']").prop('files')[0]));
formData.append('isVisible', form.closest($("input[name='isVisible']").is(':checked') ? 1 : 0));
$.ajax({
async: true,
url: '/sliders',
type: 'POST',
data: formData,
dataType: 'JSON',
processData: false,
contentType: false,
success: function (data) {
$('.form_valid_container').html('<span class="form_valid_text">✓ '+ data.success +'</span>');
form.trigger("reset");
console.log(data.success, data.errors);
},
error: function (data){
var errors = data.responseJSON;
console.log(errors);
$.each(errors , function(){
$('.form_error_container').html('<span class="form_error_text">✘ '+ errors.message +'</span>')
});
}
});
break;
default:
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这是我尝试存储图像的控制器(但最终会失败)。
public function store(StoreSlider $request)
{
$slider = new Slider();
$slider->title = $request->title;
$slider->body = $request->body;
$slider->image = $request->file('image');
$slider->isVisible = $request->isVisible;
$slider->save();
return response()->json($slider);
}
最佳答案
遵循的步骤,
您必须将图像存储在公共目录中
将公共路径存储在数据库中
要存储图片,您需要具有以下数据,
上传图片的文件名和扩展名
公共道路
公共功能商店(StoreSlider $ request)
{
$ uploadFile = $ request-> file('image');
//生成随机文件名并附加原始扩展名(例如:asddasada.jpg,asddasada.png)
$ filename = str_random(6)。'。'。$ uploadFile-> extension();
//存储路径(将其更改为公用文件夹中的所需路径)
$ path ='img /上传';
//将文件移到公共缓存器
$ uploadFile-> storeAs('../../ public /'.$ path,$ filename);
$ slider =新的Slider();
$ slider-> title = $ request-> title;
$ slider-> body = $ request-> body;
$ slider-> image = $ path。'/'。$ filename; //这样您就可以通过url($ slider-> image);访问图像
$ slider-> isVisible = $ request-> isVisible;
$ slider-> save();
返回response()-> json($ slider);
}