无法访问Laravel存储空间

时间:2016-09-28 15:56:29

标签: php laravel

我正在编写一个系统来上传和显示一些图片,但是我对上传后访问它们的正确方法感到困惑。

public function storeImage(Request $request)
{

    $request->file('image')->store('public/images');

    $filename = md5_file($request->file('image')) . '.' .  $request->file('image')->extension();
    $img = new Image;
    $img->path = 'storage/images/'.$filename;
    $img->save();

    return back();
}

这很好用,我按照建议使用符号链接storage但是如果我使用数据库中的$filename变量,我得到404.生成插入内联的正确路径是什么image src属性在这里?

图片代码如下所示: <img src="storage/images/89cdd31f2e0eeacceff96c2a0abb252f.jpeg"> 该文件夹肯定是符号链接的,因为我可以在finder中关注它。

3 个答案:

答案 0 :(得分:6)

修正了此问题。

php artisan storage:link不适用于宅基地。而是删除文件夹,使用homestead sshln -s ~/projects/my-website/storage/app/public/ ~/projects/my-website/public/storage在计算机上手动重新创建它们。

答案 1 :(得分:2)

您使用的是最新版本的laravel,5.3吗?

如果有,您是否尝试使用URL method from the Storage facade获取图片src网址?

示例:

use Illuminate\Support\Facades\Storage;

$url = Storage::url('file1.jpg'); //acquire URL

答案 2 :(得分:0)

文件应存储在目录storage/app/public中,因此请确保文件存储在此目录中。

保存文件后,请确保通过将文件名作为参数传递来获取文件的url。这是我的实现方式

html表单

<form action="" method="post" id="jobImage">
   <div class="form-group">
     <input type="file" class="form-control" id="image" name="image">
   </div>
   <input type="button" value="Upload Image" onclick="uploadImage()" class="btn btn-default" />
</form>

jquery uploadImage函数

function uploadImage(){
        $.ajax({
            url:"{{url('/')}}/uploadImage",
            headers: {
                'X-CSRF-TOKEN': "{{csrf_token()}}"
            },

            data:new FormData($("#jobImage")[0]),
            method:"POST",
            processData: false,
            contentType: false,
            success:function(data){
                console.log(JSON.stringify(data));
                // alert(JSON.stringify(data));
                // $('#jobImageToDisplay').attr('src', '/public/uploads/' + data.image);

                $('#jobImageToDisplay').attr('src', data.url);
            },
            error:function(error){
                console.log(error);
            }
        });
    }

在web.php中路由

Route::post('/uploadImage','ControllerClass@uploadImage');

在Controller类

public function uploadImage(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);


        if ($validator->passes()) {

            $input = $request->all();
            $uploadedImage = $input['image'];
            // put image to storage/app/public/uploads/images
            $name = Storage::put('/public/uploads/images/', $uploadedImage);

            $visibility = Storage::getVisibility($name);
            // set visibility to true
            Storage::setVisibility($name, 'public');

            // get the url of the uploaded file
            $url = Storage::url($name);
            // return the url
            return response()->json(['url' => $url]);
        }


        return response()->json(['error'=>$validator->errors()->all()]);
    }