在sailsjs中上传后立即显示图像

anh*_*hnt 3 upload gruntjs sails.js

我有上传字段的表格.搜索一段时间后,我只是将上传的文件放到./assets/posts文件夹中,它正常工作.

在我的应用程序中,提交完成后,应该重新加载当前网址并显示新上传的图像.但事实并非如此.我的sails应用程序使用链接器来管理资产.所以经过3到4次我尝试重新加载页面,显示图像.

我提交完成后如何立即显示图像?非常感谢!

bre*_*hin 5

Sails使用assets文件夹主要存储应该预编译和/或发布的资产,例如脚本,样式和次要图像(图标等).对于图像,在大多数情况下,sails lift它们从./assets文件夹复制(包括目录结构和符号链接)后即可./.tmp/public公开访问.

因此,问题的简短答案是:为了立即可访问,应将图像复制到./.tmp/public/posts(而不是./assets/posts).

另一方面,./.tmp文件夹正在被重写sails lift,并且您可能不希望您的上传图像在应用程序重新启动时消失,因此将图像上传到完全不同的文件夹中是有意义的,比方说./attachments/posts或其他什么,./.tmp/public/images/posts在Sails被解除之后需要进行符号链接.例如,在你的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);
  });
};
Run Code Online (Sandbox Code Playgroud)

您可以使用同步版本fs.symlink异步创建多个链接.

Windows家伙的更新

var sys = require('sys');
var exec = require('child_process').exec;
exec('mklink /j '+postsDest+' '+postsSource , function(err, stdout, stderr){
    cb(err);
});
Run Code Online (Sandbox Code Playgroud)

当然,更好的方法是将图像直接上传到CDN /存储服务(Amazon S3等),并生成相应的URL以访问它们.