在laravel 5.4中的公共目录中上传图像

时间:2018-03-12 20:10:24

标签: php laravel

我有一个添加酒店的表单我想为AnyHotel选择图像我使用Ajax保存图像目录但是我无法在public\images目录中上传图像,我的代码在这里 在刀片中:

<div class="form-group has-feedback has-feedback-left">
   <input type="file" id="image">
</div>
<button type="submit"data-dismiss="modal"
id="AddHotel">Add hotel</button>
<script>
$('#AddHotel').click(function (event) {
        var image = $('#image').val();
        var city = $('#city').val();
        $.post('/Add/Hotel', {
                'image' : image,
                '_token': $('input[name=_token]').val()
            },
            function (data) {
                console.log(data);
                window.location.reload();
            });
    });
</script>

在Controller中保存图像目录我正在使用此代码:

public function Store(request $request)
{
    $hotel->image = $request->image;
    $hotel->save();
    return $request->all();
}

我的问题在这里当我从DB图像打印此图像时应该在公共目录中,如何在目录中上传图像?

3 个答案:

答案 0 :(得分:0)

Laravel默认将文件存储在存储目录中。您可以按照此处所述创建符号链接https://laravel.com/docs/5.6/filesystem#the-public-disk,或在文件系统配置文件中创建另一个磁盘。

前者可能是你更好的选择。

答案 1 :(得分:0)

您可以使用laravel helper函数直接指定:

示例:

$currentUser = \Auth::user();
$save_path = storage_path().'/users/id/'.$currentUser->id.'/uploads/images/hotel/';

然后,要检索图像,您可以制作如下方法:

public function userHotelImages($id, $image)
{
    return Image::make(storage_path().'/users/id/'.$id.'/uploads/images/hotel/'.$image)->response();
}

并调用该方法并在web.php

中为其指定路线
// Route to show user avatar
Route::get('/user/{id}/images/hotel/{image}', [
    'uses' => 'YourControllerFileName@userHotelImages',
]);

但要根据自己的喜好调整所有路线和路径。

以下是对我使用的这种方法的一些参考,我将上述示例放在一起:

https://github.com/jeremykenedy/laravel-auth/blob/master/app/Http/Controllers/ProfilesController.php#L274

https://github.com/jeremykenedy/laravel-auth/blob/master/routes/web.php#L91

答案 2 :(得分:0)

<form method="post" enctype="multipart/form-data">
  <div class="form-group has-feedback has-feedback-left">
  <input type="file" id="image" name="image">
  </div>
 <button type="submit" id="AddHotel">Add hotel</button>  
</form>

 // saving to db
$image = $request->file('image');
$hotel->image = $image->getClientOriginalName();
$hotel->save();

// this will upload your image to public/images directory
\File::move($_FILES['image']['tmp_name'], public_path('images/'.$image ));  
return response()->json(['status' => 'true']);

您无法以现在发送的方式从ajax发送图像。提交如下数据。

$('#AddHotel').click(function (event) {
    var your_data= new FormData();

    var city = $('#city').val();
    your_data.append('city',city);
    your_data.append('_token',$('input[name=_token]').val());

    $.ajax({
    type: "POST",
    url:"/Add/Hotel",
    data:your_data,

    success: function(data){
      console.log(data);
    } 
 });

通常这样做。但您可以使用称为干预的包进行各种操作,如调整大小。你可以在这里找到http://image.intervention.io/

相关问题