Могу ли я использовать img src для отображения изображения пользователя?

Я использую Meteor для создания веб-приложения вопрос-ответ. Я хочу, чтобы пользователи загружали свои изображения. Однако у меня возникли проблемы с пониманием GridFS, поэтому я избегаю этого. Чтобы преодолеть это, я создаю профиль для каждого пользователя, который хранит их description, name и 'image_url' для изображения своего профиля, то есть я прошу пользователей предоставить URL-адрес своего изображения, которое помещается в img src для отображения изображения профиля. На локальном сервере он работает нормально, и изображение каждого отображается пользователь.

Вот common.js.

Я оставил пустыми поля src и другие поля, которые можно заполнить на странице создания профиля.

Template.register.events({
    'submit form': function(event){
        event.preventDefault();
        var username = event.target.username.value;
        var password = event.target.password.value;
        Accounts.createUser({
    username: username,
    password: password,

}, function(error){
    if(error){
        alert(error.reason);
        event.target.password.value=''; // Output error if registration fails
    } else {
        Profile.insert({
        name:'',
        hobbies:'',
        description:'',
        currentUser:Meteor.userId(),
        src:'',
        followers:0,
        following:0,
        followedBy:[],
        followingTo:[]
        });

        Router.go("createProfile"); // Redirect user if registration succeeds
    }
});

После этого пользователь направляется на страницу создания профиля, где его / ее спрашивают о его / ее описании и URL-адресе изображения профиля, а профиль пользователя в базе данных обновляется.

Template.createProfile.events({
        'click button':function(event){
        event.preventDefault();
        var name=document.getElementById('name').value;
        var hobbies=document.getElementById('hobbies').value;
        var description=document.getElementById('description').value;
        var src=document.getElementById('src').value;
        var currentUser=Meteor.userId();
        Profile.update({ _id: this._id },{$set:{name:name}});
        Profile.update({ _id: this._id },{$set:{hobbies:hobbies}});
        Profile.update({ _id: this._id },{$set:{description:description}});
        Profile.update({ _id: this._id },{$set:{src:src}});
        Router.go('posts');

    }
});

Вот router.js

Router.route('/createProfile', {
    template: 'createProfile',
    name:'createProfile',
    data: function(){

        return Profile.findOne({ currentUser: Meteor.userId() });

    }
});

Router.route('/users'); //used helpers profile helper to display the list of every user with their links to profile page

Router.route('/user/:_id', {
    template: 'profilePage',
    name:'profilePage',
    data: function(){
        var currentProfile = this.params._id;
        return Profile.findOne({ _id: currentProfile });
    }
});

Вот HTML

<template name='users'>//users is displaying the links to every user profile
<div class='container'>
{{#each profile}}
<div class='col-lg-6'>
<a href="{{pathFor route='profilePage'}}"><h3>{{name}}</h3>
<img src='{{src}}' class='img-responsive img-circle pull-left' height='50' width='50'/></a>
</div>
{{/each}}
</div>
</template>

Это страница профиля каждого пользователя -

<template name='profilePage'>

<h2 class='media-heading'> Profile</h2>
<div class='well'>

<img src='{{src}}' class='img-responsive img-circle pull-left' id='profileImage' height='50' width='50'/>
Name:{{name}}

<br>

Hobbies:{{hobbies}}

<br>

Description:{{description}}

<br>

<a href='{{pathFor route="followers"}}'>Followers:{{followers}}</a>

<br>

<a href='{{pathFor route="following"}}'>Following:{{following}}</a>
<br>
<button id={{followColor}} class='btn btn-default glyphicon glyphicon-eye-open' {{disabled}}>{{followOrfollowing}}</button>
<br>

</div>
<br>




<hr/>
</template>

Здесь {{src}} возвращает image_url, предоставленный пользователем.

Мой вопрос: будет ли этот метод работать, если мое веб-приложение выйдет в сеть, и верен ли этот метод?


person Harshit Bisht    schedule 07.07.2016    source источник


Ответы (1)


Краткий ответ: да.

Было бы полезно увидеть ваш вспомогательный метод, чтобы убедиться, что он работает правильно, но если он отображается нормально, то, я думаю, вы все сделали правильно. Вы просто столкнулись с потенциальной проблемой, когда пользователь отправляет неверный URL-адрес. Но для этого варианта использования это действительно не в ваших руках.

person gkrizek    schedule 08.07.2016
comment
Да, выглядит нормально. Это должно работать, когда вы публикуете свое приложение. Я заметил одну вещь: я считаю, что вы можете сжать свой Profile.update до одной строки. Вот так: Profile.update({ _id: this._id },{$set:{name:name, hobbies:hobbies, description:description, src:src}}); - person gkrizek; 08.07.2016