Dar*_*han 2 jquery azure node.js ember.js
我正在使用此界面在我的应用上上传文件:
https://github.com/Wildhoney/EmberDroplet
我的应用程序在Node.js上运行,而Ember是我正在使用的客户端框架.我还需要使用Azure存储服务来存储文件/图像上传.
但是,由于我对这个概念和工具方面很新(Node和Ember,因此是EmberDroplet),我不明白如何通过Ember Droplet上传文件,然后将其发送到我的节点服务器以便上传它到Azure.
我已经安装了Azure-Storage软件包并在Node.js上直接测试了它的上传.这有效.
我已将Ember-Droplet mixin与我的界面集成,它确实将文件拖入其中或通过文件输入选择.
我不知道如何连接这两个:EmberDroplet有一个名为uploadallfiles的函数,它似乎将提供的文件数组作为输入并从中创建一个XHR对象,并在它返回其jQuery promise之前,它发送XHR请求.
我的问题是:如何设置我的应用程序,以便在执行uploadallfiles时,我的node.js服务器可以访问它们,以便它可以将它们上传到azure,然后在文件关联的模型中存储对它的引用用?
后续问题是这样的:Azure关于将Azure与节点一起使用的教程展示了如何通过它的文件路径获取本地存储的文件,然后将其上传到Blob存储.然而,
回答你的问题:
关于你关于Ember和Ember-Droplet的问题,Ember-Droplet有一些很好的示例代码,显示了实现服务器端所需的内容.请查看以下摘录:https://github.com/Wildhoney/EmberDroplet/blob/master/example/node-server/server.js
// Responsible for handling the file upload.
app.post('/upload', function(request, response) {
var files = request.files.file,
promises = [];
/**
* @method uploadFile
* @param file {Object}
* @return {Object}
*/
var uploadFile = function uploadFile(file) {
var deferred = new Deferred();
fileSystem.readFile(file.path, function (error, data) {
var filePath = __dirname + '/uploaded-files/' + file.name;
fileSystem.writeFile(filePath, data, function() {});
deferred.resolve(file.name);
});
return deferred.promise;
};
if (!Array.isArray(files)) {
// We're dealing with only one file.
var promise = uploadFile(files);
promises.push(promise);
} else {
// We're dealing with many files.
files.forEach(function(file) {
var promise = uploadFile(file);
promises.push(promise);
});
}
promisedIo.all(promises).then(function(files) {
response.send({ files: files, success: true });
response.end();
});
});
Run Code Online (Sandbox Code Playgroud)
显然,假设您正在使用Express,但无论如何它都证明您需要实现与dropletUrl(与控制器中指定的)相对应的post方法:https://github.com/Wildhoney/EmberDroplet/blob/ master/example/scripts/controller.js)来处理接收文件.
然后,您将要uploadFile使用Azure节点SDK替换为Azure存储写入内容的实现.我把这个你可以使用的小功能放在一起:
var azure = require('azure-storage');
var blobService = azure.createBlobService('mystorageaccountname', 'mystorageaccountkey', 'https://mystorageaccountname.blob.core.windows.net');
var uploadFile = function(file) {
var deferred = new Deferred();
blobService.createBlockBlobFromFile('mycontainername', file.name, file.path, function(error, result, response) {
if (!error) {
deferred.resolve(file.name);
}
});
return deferred.promise;
};
Run Code Online (Sandbox Code Playgroud)
如果将该函数放入Ember-Droplet示例服务器实现中而不是现有服务器实现中,则最终将服务器将文件写入blob存储.请注意,您需要使用有效的存储帐户名,存储帐户密钥和blob容器名来代替上面的占位符(包括在调用中指定的主机字符串中azure.createBlobService).
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |