1

我不确定以前是否有人问过这个问题,我一直在浏览互联网寻找有关文件上传的答案,但找不到合适的答案。事情是这样的:我想将文件上传到服务器。这没关系。我发现大量讨论讨论如何将文件上传到服务器。

现在我的问题是我无法找到一种方法来告诉客户端文件已有效上传或者是否有错误......我一直在客户端上尝试, Meteor.call('methodName', args, function(error, result){//some code});在服务器上使用这个:

Meteor.methods({
    saveFile: function (blob, name, path, encoding) {
        var fs = __meteor_bootstrap__.require('fs');
        var path = badgesHelper.cleanPath(path);
        var name = badgesHelper.cleanName(name || 'file');
        var encoding = encoding || 'binary';
        path = Meteor.chroot + path + '/';
        console.log(path, name, encoding);

        var uploadResult = {success: false};

        fs.writeFile(path + name, blob, encoding, function (error) {
            if (error) {
                uploadResult.error = error
                Meteor.Error(500, 'An error occurred');
            } else {
                var date = new Date();
                uploadResult.success = true;
            }
        });
        return uploadResult;
    }
});

而且我只是找不到将uploadResult映射发送到客户端的方法。由于调用是异步的,节点在调用回调函数之前点击“返回”并且uploadResult具有函数的真实结果......我不想使用filepicker.io我需要知道如何做到这一点任何包裹。

如果我做错了,请指教,因为现在我被困在那里......

谢谢

4

1 回答 1

0

这里不需要映射,因为您只返回一个boolean值,您可以直接返回它。如果出现错误,您可以直接抛出它而不是false. 此外,您必须throw new Meteor.Error()而不是仅仅Meteor.Error().

修改后的代码:

Meteor.methods({
    saveFile: function (blob, name, path, encoding) {
        var fs = __meteor_bootstrap__.require('fs');
        var path = badgesHelper.cleanPath(path);
        var name = badgesHelper.cleanName(name || 'file');
        var encoding = encoding || 'binary';
        path = Meteor.chroot + path + '/';
        console.log(path, name, encoding);

        var uploadResult = false;

        fs.writeFile(path + name, blob, encoding, function (error) {
            if (error) {
                // EDIT: Throws an error
                // error.error = 500; error.reason = "An error occurred";
                throw new Meteor.Error(500, 'An error occurred');
            } else {
                // result = true
                return true;
            }
        });
    }
});
于 2013-03-04T17:11:39.130 回答