-1
A
回答
0
您可以傳遞服務器方法上的數據,而不是使用文件系統,您可以將文件寫入本地磁盤。
客戶端代碼:
模板代碼:
<template name="example">
<input type=file />
</template>
模板事件代碼:
Template.example.events({
'change input': function(ev) {
_.each(ev.srcElement.files, function(file) {
Meteor.saveFile(file, file.name);
});
}
});
Meteor.saveFile功能的代碼:
/**
* @blob (https://developer.mozilla.org/en-US/docs/DOM/Blob)
* @name the file's name
* @type the file's type: binary, text (https://developer.mozilla.org/en-US/docs/DOM/FileReader#Methods)
*
* TODO Support other encodings: https://developer.mozilla.org/en-US/docs/DOM/FileReader#Methods
* ArrayBuffer/DataURL (base64)
*/
Meteor.saveFile = function(blob, name, path, type, callback) {
var fileReader = new FileReader(),
method, encoding = 'binary', type = type || 'binary';
switch (type) {
case 'text':
// TODO Is this needed? If we're uploading content from file, yes, but if it's from an input/textarea I think not...
method = 'readAsText';
encoding = 'utf8';
break;
case 'binary':
method = 'readAsBinaryString';
encoding = 'binary';
break;
default:
method = 'readAsBinaryString';
encoding = 'binary';
break;
}
fileReader.onload = function(file) {
Meteor.call('saveFile', file.srcElement.result, name, path, encoding, callback);
}
fileReader[method](blob);
}
服務器端代碼:
/**
* TODO support other encodings:
* http://stackoverflow.com/questions/7329128/how-to-write-binary-data-to-a-file-using-node-js
*/
Meteor.methods({
saveFile: function(blob, name, path, encoding) {
var path = cleanPath(path), fs = __meteor_bootstrap__.require('fs'),
name = cleanName(name || 'file'), encoding = encoding || 'binary',
chroot = Meteor.chroot || 'public';
// Clean up the path. Remove any initial and final '/' -we prefix them-,
// any sort of attempt to go to the parent directory '..' and any empty directories in
// between '/////' - which may happen after removing '..'
path = chroot + (path ? '/' + path + '/' : '/');
// TODO Add file existance checks, etc...
fs.writeFile(path + name, blob, encoding, function(err) {
if (err) {
throw (new Meteor.Error(500, 'Failed to save file.', err));
} else {
console.log('The file ' + name + ' (' + encoding + ') was saved to ' + path);
}
});
function cleanPath(str) {
if (str) {
return str.replace(/\.\./g,'').replace(/\/+/g,'').
replace(/^\/+/,'').replace(/\/+$/,'');
}
}
function cleanName(str) {
return str.replace(/\.\./g,'').replace(/\//g,'');
}
}
});
相關問題
- 1. Python何時將文件寫入磁盤?
- 2. 寫入文件到服務器磁盤,而不是下載
- 3. 將System.Xml.XmlElement寫入磁盤上的文件
- 4. 將解壓縮的文件寫入從Web服務器獲取的磁盤
- 5. 文件寫入磁盤
- 6. 如何在不用PHP將文件寫入磁盤的情況下將文件發佈到REST服務器?
- 7. 從遠程ftp服務器提取文件的內容而不寫入本地磁盤中的文件
- 8. 新聞文章:寫入沒有PHP的服務器磁盤?
- 9. WordPress無法將文件寫入磁盤
- 10. 強制將文件寫入磁盤
- 11. 將ASP.NET aspx頁面輸出寫入服務器端磁盤
- 12. 將文本或HTML寫入磁盤上的文件
- 13. 在服務器上寫高磁盤
- 14. 創建+服務(通過HTTP).ZIP文件,而不寫入磁盤?
- 15. 如何將文本寫入服務器端文件
- 16. 如何將WPF圖像資源的文件夾寫入磁盤?
- 17. 如何正確地將動態文件寫入FTP服務器?
- 18. 如何將XPerf寫入備用磁盤
- 19. 將Azure雲服務性能計數器寫入本地文件
- 20. 如何有效地將傳入數據寫入磁盤?
- 21. WMI:如何將內部的「本地磁盤」 HDD和外部「本地磁盤」 HDD
- 22. FileOutputStream未寫入服務器上的磁盤?文件在哪裏去?
- 23. 將PFObject寫入磁盤
- 24. vue + electron如何將文件寫入磁盤
- 25. PHP:如何使用Unicode字符將文件寫入磁盤
- 26. 如何將對象寫入磁盤(保存在文件中)
- 27. Nginx的代理服務器上的文件本地磁盤或S3
- 28. 不寫入磁盤的C++文件
- 29. PHP腳本不會將大文件寫入磁盤
- 30. VBScript寫入服務器文本文件