我有一个表单带有上传字段。经过一番搜索,我把上传的文件放到了./assets/posts文件夹中,它也能正常运行。
在我的应用程序中,当提交完成后,它应该重新加载当前网址并显示新上传的图像。但实际上却没有。我的Sails应用程序使用链接器来管理资产。所以在尝试3或4次重新加载页面后,图像才会显示。
如何在提交完成后立即显示图像? 非常感谢!
assets
文件夹主要存储预编译和/或发布的资产,例如脚本、样式和小型图像(如图标等)。对于图像,这意味着在大多数情况下,在sails lift
时,它们将被复制(包括目录结构和符号链接)从./assets
文件夹到./.tmp/public
,从而变为公开可访问。./.tmp/public/posts
(而不是./assets/posts
)。sails lift
期间,./.tmp
文件夹将被重写,您可能不希望上传的图像在应用程序重新启动时消失,因此有意义在完全不同的文件夹中上传图像,比如说./attachments/posts
或其他什么文件夹,然后在Sails启动后需要从./.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);
});
};
var sys = require('sys');
var exec = require('child_process').exec;
exec('mklink /j '+postsDest+' '+postsSource , function(err, stdout, stderr){
cb(err);
});
./attachments/posts
,则可以通过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 = function (cb) { ... require('fs').symlink('<source_path>', '<dest_path>', function(err) { cb(err); }); };
。 - bredikhin./.tmp/public/images/posts
中。它们将在Sails重新启动后消失,但我想你可以在开发阶段处理它们。 - bredikhin一种与操作系统无关的替代方法是在 /tasks/config/clean.js 中更改 grunt-clean 任务以指定要清除哪些文件夹在你的 .tmp/public。请见下面的示例。在我的情况下,我在 .tmp/public 中创建了一个名为“uploads”的文件夹,它不会被删除。
grunt.config.set('clean', {
dev: ['.tmp/public/fonts/**','.tmp/public/images/**','.tmp/public/js/**','.tmp/public/js/**','.tmp/public/styles/**','.tmp/public/*.*'],
build: ['www']
});