1

我的流星应用程序不下载以前存储的文件。

最初我以为我遇到了 ongoworks:CollectionFS 的安全支持问题。

RsrchDocs.files.permit(['download']).apply() 导致 Invalid key 错误。已多次阅读 ongoworks:security 文档和 CollectionFS 文档,但没有发现我的错误。“ongoworks:security issues 4, 17, 20 的 Github 存储库似乎解决了这个问题。目前尚不清楚所提出的问题是否已经完全解决。我尝试了这些建议但没有成功。因为 RsrchDocs.allow({... }) (选项 B)允许服务器(重新)启动而没有错误我可能(可能?)有另一个错误阻止下载。

使用选项 A 或 B 时,将鼠标悬停在浏览器中的下载链接上会显示正确的 URL,但单击该链接不会启动下载。手动将 URL 复制到地址字段中并提交成功下载文档。

我应该在我的流星应用程序中做什么/更改才能成功下载以前存储的文档?

服务器/security.js

RsrchDocs.files.permit(['insert', 'update', 'remove']).apply();

// Option A:
// Uncommented causes "(STDERR) Error: EBADF, read" on (re)start
// Document download is NOT permitted.
//Security.permit(['download']).collections([RsrchDocs]).apply();

// Option B:
// Uncommented (re)starts without any error message
// Document download is NOT permitted 
//RsrchDocs.allow({
//    download: function(userId, doc){
//        return true;
//    }
//});

// Option C:
// Uncommented (re)starting meteor causes multiline error message
// Server start fails
//RsrchDocs.files.permit(['download']).apply();

// The error messages:
[[[[[ C:\Users\loco\My Projects\Meteor\research ]]]]]

=> Started proxy.
=> Started MongoDB.
I20150817-10:38:58.532(-5)? Meteor._wrapAsync has been renamed to Meteor.wrapAsync
=> Started your app.

=> App running at: http://localhost:3000/
   Type Control-C twice to stop.

(STDERR) Error: EBADF, read
Meteor._wrapAsync has been renamed to Meteor.wrapAsync
(STDERR)
(STDERR) C:\Users\loco\AppData\Local\.meteor\packages\meteor-tool\1.1.4\mt-os.windows.x86_32\dev_bundle\server-lib\node_modules\fibers\future.js:245
(STDERR)                                            throw(ex);
(STDERR)                                                  ^
(STDERR) Error: allow: Invalid key: download
(STDERR)     at packages/mongo/collection.js:723:1
(STDERR)     at Array.forEach (native)
(STDERR)     at Function._.each._.forEach (packages/underscore/underscore.js:105:1)
(STDERR)     at [object Object].addValidator (packages/mongo/collection.js:721:1)
(STDERR)     at [object Object].Mongo.Collection.allow (packages/mongo/collection.js:769:1)
(STDERR)     at packages/ongoworks:security/security-util.js:39:1
(STDERR)     at Array.forEach (native)
(STDERR)     at Function._.each._.forEach (packages/underscore/underscore.js:105:1)
(STDERR)     at addFuncForAll (packages/ongoworks:security/security-util.js:38:1)
(STDERR)     at packages/ongoworks:security/security-util.js:56:1
(STDERR)     at Array.forEach (native)
(STDERR)     at Function._.each._.forEach (packages/underscore/underscore.js:105:1)
(STDERR)     at ensureCreated (packages/ongoworks:security/security-util.js:52:1)
(STDERR)     at ensureDefaultAllow (packages/ongoworks:security/security-util.js:70:1)
(STDERR)     at SecurityRuleConstructor.Security.Rule.apply (packages/ongoworks:security/security-api.js:76:1)
(STDERR)     at app\server\security.js:18:38
(STDERR)     at app\server\security.js:22:3
(STDERR)     at C:\Users\loco\My Projects\Meteor\research\.meteor\local\build\programs\server\boot.js:222:10
(STDERR)     at Array.forEach (native)
(STDERR)     at Function._.each._.forEach (C:\Users\loco\AppData\Local\.meteor\packages\meteor-tool\1.1.4\mt-os.windows.x86_32\dev_bundle\server-lib\node_modules\underscore\underscore.js:79:11)
(STDERR)     at C:\Users\loco\My Projects\Meteor\research\.meteor\local\build\programs\server\boot.js:117:5
=> Exited with code: 8
Meteor._wrapAsync has been renamed to Meteor.wrapAsync

lib/collections/rsrchDocs.js

RsrchDocs = new FS.Collection("rsrchDocs", {
  stores: [new FS.Store.FileSystem("rsrchDocs")]
});

if(Meteor.isClient){
    Meteor.subscribe('RsrchDocs')
}

// server/publish.js
Meteor.publish('RsrchDocs', function(){
  return RsrchDocs.find({});
});

客户端/文档/模板.html

<template name='subjDocs'>
  <div id='upload' class='upload'>
    {{> upload}}
  </div>
  <div class="col-xs-12" id="docsTable">
    {{> reactiveTable collection=subjDocs settings=docSettings }}
  </div>
</template>

客户端/文档/helpers.js

Template.subjDocs.helpers({
  subjDocs: function() {
    return RsrchDocs.find({ 'metadata.subjId': this._id });
  },
  docSettings: function(){
    return {
      fields: [
        { key: 'metadata.subjId', label: 'Subject', hidden: false },
        // ...
        { key: 'original.name', label: 'Name',
          fn: function(value, object) {
            var docName = value;
            var dnloadURL = object.url({download: true});
            var linkStr = "<a href= '"+dnloadURL+"' >"+docName+"</a>";
            return Spacebars.SafeString(linkStr);
          },
        },
      ],
    };
  }
});

客户端/文档/events.js

Template.subjDocs.events({
  'click .reactive-table tr': function (event) {
    event.preventDefault();
    var subjDoc = this;
    switch (event.target.className) {
      case 'delete':
        if( confirm && subjDoc ) {
          subjDoc.remove()
        };
        return false;
        break;
      //case ...
    };
  },
});

环境:

Windows 7
C:\Users\ ... \research>meteor list
accounts-password            1.1.1
alanning:roles               1.2.13
aldeed:autoform              5.4.1
aldeed:collection2           2.3.3
aldeed:simple-schema         1.3.3
aslagle:reactive-table       0.8.11
cfs:ejson-file               0.1.4
cfs:filesystem               0.1.2
cfs:gridfs                   0.0.33
cfs:standard-packages        0.5.9
cfs:ui                       0.1.3
email                        1.0.6
fortawesome:fontawesome      4.4.0
ian:accounts-ui-bootstrap-3  1.2.77
iron:router                  1.0.9
meteor-platform              1.2.2
ongoworks:security           1.2.0
raix:ui-dropped-event        0.0.7
reactive-var                 1.0.5
sanjo:jasmine                0.17.0
twbs:bootstrap               3.3.5
velocity:html-reporter       0.8.2
4

0 回答 0