Паруса использует папку assets
для хранения в основном активов, которые должны быть предварительно скомпилированы и/или опубликованы, например. скрипты, стили и второстепенные изображения (значки и т. д.). Для изображений это означает в большинстве случаев, что при sails lift
они копируются (включая структуру каталогов и символические ссылки) из папки ./assets
в ./.tmp/public
, которая становится общедоступной.
Итак, короткий ответ на вопрос: для того, чтобы стать незамедлительно доступным, изображения должны быть скопированы на ./.tmp/public/posts
(не до ./assets/posts
).
С другой стороны, папка ./.tmp
переписывается во время sails lift
, и вы, вероятно, не хотите, чтобы ваши загруженные изображения исчезали всякий раз, когда приложение перезагружается, поэтому имеет смысл загружать изображения в совершенно другую папку, скажем ./attachments/posts
или еще что-то, что в свою очередь должно быть символически связано с ./.tmp/public/images/posts
после того, как паруса подняты. Например, в вашем config/bootstrap.js
вы можете поставить что-то вроде
var fs = require('fs')
, path = require('path');
module.exports.bootstrap = function (cb) {
// Whatever else you want to bootstrap...
var postsSource = path.join(process.cwd(), 'attachments/posts')
, postsDest = path.join(process.cwd(), '.tmp/public/images/posts');
fs.symlink(postsSource, postsDest, function(err) {
cb(err);
});
};
Вы можете использовать synchronous version из fs.symlink или async создать несколько ссылок.
Обновление для окон парней
var sys = require('sys');
var exec = require('child_process').exec;
exec('mklink /j '+postsDest+' '+postsSource , function(err, stdout, stderr){
cb(err);
});
И, конечно же, еще лучше было бы загружать изображения непосредственно в службу CDN/хранения (Amazon S3 и т.д.) и просто генерировать соответствующие URL-адреса в доступ к ним.
Привет, если я загружаю в ./attachments/posts, то как получить ссылку из представления? большое спасибо! – anhnt
Если вы загружаете файлы «./Вложения/сообщения», изображения могут быть отправлены через URL-адреса, такие как 'http: // your.site.com/images/posts/image001.jpg', но только после создания символической ссылки что-то например 'mkdir -p ./.tmp/public/images && ln -s ./attachments/posts ./. tmp/public/images/posts'. Опять же, поскольку эта команда должна применяться каждый раз, когда Sails поднимаются, имеет смысл сделать это из вашего кода, например, из вашей функции 'config/bootstrap.js':' module.exports.bootstrap = (cb) {... require ('fs'). symlink ('', '', function (err) {cb (err);}); }; ' –
bredikhin
Ницца, спасибо за вашу помощь.Вы сохранили мой день :) – anhnt