Điều gì sẽ là cách kinh điển để xử lý một tập tin tải lên với Meteor?
Điều gì sẽ là cách kinh điển để xử lý một tập tin tải lên với Meteor?
Hiện tại không có vẻ là một cách để tương tác với máy chủ HTTP hoặc làm bất cứ điều gì liên quan đến HTTP.
Điều duy nhất bạn có thể làm là nói chuyện với máy chủ qua các phương thức RPC được Meteor.methods trưng ra hoặc nói chuyện trực tiếp với mongoDB trên API mongoDB.
Tôi đã sử dụng http://filepicker.io. Họ sẽ tải lên tập tin, lưu trữ nó vào S3 của bạn, và trả lại cho bạn một URL nơi tập tin được. Sau đó, tôi chỉ cần gõ url vào một DB.
Wget tập lệnh filepicker vào thư mục khách hàng của bạn.
wget https://api.filepicker.io/v0/filepicker.js
Chèn thẻ đầu vào filepicker
<input type="filepicker" id="attachment">
Khi khởi động, khởi tạo nó:
Meteor.startup( function() {
filepicker.setKey("YOUR FILEPICKER API KEY");
filepicker.constructWidget(document.getElementById('attachment'));
});
Đính kèm trình xử lý sự kiện
Templates.template.events({
'change #attachment': function(evt){
console.log(evt.files);
}
});
Đối với hình ảnh, tôi sử dụng phương pháp tương tự Dario's ngoại trừ tôi không ghi tập tin vào đĩa. Tôi lưu trữ dữ liệu trực tiếp trong cơ sở dữ liệu dưới dạng một trường trên mô hình. Điều này phù hợp với tôi vì tôi chỉ cần hỗ trợ các trình duyệt hỗ trợ API tệp HTML5. Và tôi chỉ cần hỗ trợ hình ảnh đơn giản.
Template.myForm.events({
'submit form': function(e, template) {
e.preventDefault();
var file = template.find('input type=["file"]').files[0];
var reader = new FileReader();
reader.onload = function(e) {
// Add it to your model
model.update(id, { $set: { src: e.target.result }});
// Update an image on the page with the data
$(template.find('img')).attr('src', e.target.result);
}
reader.readAsDataURL(file);
}
});
Tôi vừa mới nghĩ ra triển khai tệp tải lên sử dụng Meteor.methods và API của tệp HTML5. Cho tôi biết bạn nghĩ gì.
Có một gói mới: edgee: súng cao su. Nó không tải các tập tin lên máy chủ sao băng của bạn, nhưng tốt hơn là nó cho phép máy chủ sao băng tập trung vào mục tiêu chính của nó là phục vụ ứng dụng sao băng thay vì xử lý các chuyển tập tin tốn kém.
Thay vào đó, nó tải tệp lên dịch vụ lưu trữ đám mây. Hiện tại nó hỗ trợ AWS S3 và Google Cloud Files, nhưng nó cũng sẽ hỗ trợ Rackspace Cloud Files và có lẽ Cloudinary trong tương lai.
Máy chủ sao băng của bạn chỉ hoạt động như một điều phối viên.
Nó cũng là một gói rất nhẹ và linh hoạt.
có một gói không khí gọi là bộ định tuyến cho phép điều đó.
thực sự, cách tốt nhất để xử lý tải lên tệp hiện là bộ sưu tậpFS
Đây là giải pháp tốt nhất cho lần này. Nó sử dụng bộ sưu tậpFS.
meteor add cfs:standard-packages
meteor add cfs:filesystem
Khách hàng:
Template.yourTemplate.events({
'change .your-upload-class': function(event, template) {
FS.Utility.eachFile(event, function(file) {
var yourFile = new FS.File(file);
yourFile.creatorId = Meteor.userId(); // add custom data
YourFileCollection.insert(yourFile, function (err, fileObj) {
if (!err) {
// do callback stuff
}
});
});
}
});
Máy chủ:
YourFileCollection = new FS.Collection("yourFileCollection", {
stores: [new FS.Store.FileSystem("yourFileCollection", {path: "~/meteor_uploads"})]
});
YourFileCollection.allow({
insert: function (userId, doc) {
return !!userId;
},
update: function (userId, doc) {
return doc.creatorId == userId
},
download: function (userId, doc) {
return doc.creatorId == userId
}
});
Bản mẫu:
<template name="yourTemplate">
<input class="your-upload-class" type="file">
</template>
Bạn có thể thử tải trực tiếp lên amazon S3, thực hiện một số thủ thuật với người tải lên và nội dung js. http://aws.amazon.com/articles/1434