服务器上的Meteor FS.Collection访问集合

时间:2016-02-15 18:34:28

标签: node.js meteor fs

我正在使用FS.Collection在服务器上上传短视频文件,然后将其作为附件发送到电子邮件中。

插入服务器上的集合工作,我可以访问客户端上的集合项,也可以直接使用文件URL的路径流式传输 - localhost:3000/cfs/files/videos/{{item_id}}

我想知道如何访问服务器上的集合。我想以下面的形式发送带附件的电子邮件,并且需要访问服务器上的文件和文件名路径。我试过了:

Email.send({
  to: to,
  from: from,
  subject: subject,
  text: text,
  attachments:[{fileName:"video.mp4", filePath:"/cfs/files/videos/{{item_id}}"}]
});

它会在电子邮件中显示附件视频播放器,但会显示错误消息,因此我假设我没有正确访问文件。

我的Collection.js很简单:

var videoStore = new FS.Store.GridFS("videos");

Videos = new FS.Collection("videos", {
  stores: [videoStore]
});

1 个答案:

答案 0 :(得分:1)

您不能使用collectionFS的filePath附件。 “/ cfs / files / videos / {{item_id}}”是一个虚拟路径,即/ cfs / files / videos中不存在文件,也没有'/ cfs / files / videos'文件夹。

您可以改用http路径:

var ROOT_URL = process.env.ROOT_URL;
var rootUrl;
if (ROOT_URL.indexOf('/', ROOT_URL.length - 1) != -1) {
    rootUrl = ROOT_URL.substring(0, ROOT_URL.length - 1);
} else {
    rootUrl = ROOT_URL;
}

var attachments = [];
attachment = {
    fileName: fileName(url),
    filePath: rootUrl + "/cfs/files/videos/{{item_id}}"
};
attachments.push(attachment);

Email.send({
    to: to,
    from: from,
    subject: subject,
    text: text,
    attachments: attachments
});