2016-02-15 3 views
1

Я использую FS.Collection для загрузки короткого видеофайла на сервер, а затем отправки его в виде вложения по электронной почте.Сбор коллекции Meteor 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

Вы не можете использовать крепление с помощью Filepath из collectionFS. "/ 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 
}); 
Смежные вопросы