2017-02-17 9 views
0

Я работаю с хранением локальных изображений, используя Types.File У меня есть 2 вопроса, если кто-нибудь может мне помочь!Как отображать миниатюры/предварительные изображения KeystoneJS, хранящиеся в Type.File? и схема url vs. publicPath

1) я определил мое publicPath в «фс» и установить URL схемы истинно, я ожидал, что URL затем будет возвращать то, что содержит publicPath, , но вместо этого он получил/публичный/«имя файла», я определяю publicPath неправильно? или это предназначено для чего-то еще?

2) Я попытался использовать свойство format Types.File и Types.Url, чтобы вернуть тег изображения в виде миниатюры/предварительного просмотра, но не повезло с ними обоими, я заметил, что формат был удален и будет реализован Вернемся в «Типы». Нет, еще нет? или я сделал что-то неправильно здесь также?

var myStorage = new keystone.Storage({ 
    adapter: keystone.Storage.Adapters.FS, 
    fs: { 
     path: keystone.expandPath('./public/postimages'), // required; path where the files should be stored 
     publicPath: '/postimages', // path where files will be served 
    }, 
    schema: { 
     url: true 
    } 
}); 

Post.add({ 
     *...* 
     image: { 
     type: Types.File, 
     storage: myStorage, 
     /* format: function(item, file) { 
      return '<img src="/files/' + file.filename + '" style="max-width: 300px">'; 
     } */ 
     }, 
    image_url: { 
     type: String, 
     noedit: true, 
    } 
     *...* 
}); 

Post.schema.pre('save', function(next) { 
    this.image_url = this.image ? this.image.url : ''; 
    next(); 
}); 

ответ

0

Для вашей первой проблемы у меня было то же самое. Оказывается, что адаптер FS использует https://nodejs.org/api/url.html#url_url_resolve_from_to для создания URL-адрес строки (приведенный ниже код, взятый из адаптера FS трапецеидального искажения в):

/** 
    Gets the public path of a stored file by combining the publicPath option 
    with the filename in the field value 
*/ 
FSAdapter.prototype.getFileURL = function (file) { 
    var publicPath = this.options.publicPath; 
    if (!publicPath) return null; // No URL. 

    return url.resolve(publicPath, file.filename); 
}; 

Как видно из примера, на странице nodejs документации:

url.resolve('/one/two/three', 'four')   // '/one/two/four' 

Итак, просто добавьте «/» после/postimages, и он должен работать.

publicPath: '/postimages/' 

Вещи должны работать после этого.