Невозможно отобразить изображение в vue хранилище формы компонента Laravel - PullRequest
0 голосов
/ 24 апреля 2020

Я не могу отобразить изображение в vue компоненте из каталога Storage Laravel. Помогите мне решить эту проблему:

изображения сохраняются в БД как public/avatar/TSD50oeYXnkrX1nQ38N9zljP1FRdP42yPhJOrEKg.png

, если я удаляю путь publi c и делаю это <img :src="'../storage/avatar/31deG4gnbO3EwO2s26lnUe0KzJjskFfm8lPIGFeM.jpeg'" width="100">

i можно увидеть изображение, отображаемое в компоненте vue, из папки storage / public / avatar

метод для получения сведений об однопользовательских

public function user($id){
        return $user = User::find($id);
    }

методах для сохранения изображения

public function profilePic(Request $request){
        $this->validate($request,[
            'image'=>'required|mimes:jpeg,jpg,png'
        ]);
        $image = $request->image->store('public/avatar');
        $authUser = auth()->user()->id;
        $user = User::where('id',$authUser)->update([
            'profilePic'=> $image
        ]);
        return redirect()->back();
    }

vue:

<template>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Profile Component</div>

            {{user.profilePic}}
//how can i display image here


<div class="card-body">
                        <form @submit.prevent="updateProfilePic" method="post" enctype="multipart/form-data">
                            <input type="file" name="image" class="form-control"v-on:change="onImageChange">
                            <button type="submit" class="btn btn-primary">Submit</button>

                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        props:['userid'],
        data(){
            return{
                image:'',
                user:[]

            }
        },
        mounted() {
            this.getUser()
            console.log('Component mounted.')
        },
        methods:{
            onImageChange(e){
                console.log(e)
                this.image = e.target.files[0];

                },
            updateProfilePic(){
                const config={
                    headers:{
                        "content-type":"multipart/form-data"
                    }
                }
                let formData = new FormData();
                formData.append('image',this.image);

                axios.post('/profile-pic',formData,config).then((response)=>{
                    this.image='';
                    this.getUser()



                }).catch((error)=>{
                    console.log(error)
                    this.allerrors = error.response.data.errors
                })
            },
            getUser(){
                axios.get('/user/'+this.userid).then((response)=>{
                    this.user = response.data
                }).catch((error)=>{
                    alert('some error')
                })
            },
        }
    }
</script>

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Вы можете отобразить изображение следующим образом. Вот связанный вопрос

<img :src="'/avatar/' + user.profilePic" alt="Profile Photo">
0 голосов
/ 24 апреля 2020

Скорее всего, вы не установили символическую ссылку c между папками хранения и публикации c. Попробуйте выполнить эту команду: php artisan storage:link

Подробнее узнать можно здесь: https://laravel.com/docs/7.x/filesystem#the -publi c -disk

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...