1

meteor-cfs-ui-package を使用すると、ファイルのアップロードの進行状況バーを表示できます。ただし、これは 2 MB を超えるファイルに対してのみ有効です。ファイルが小さい場合、バーは 0% から 100% にジャンプします。

ここで、このコードを使用する解決策を見つけました:

if(fsFile.original.size < (2097152)*10) {
  var chunkSize = fsFile.original.size / 10;
  FS.config.uploadChunkSize = chunkSize;
}
uploadFile(fsFile, fullFileName, projectId);

しかし、そのコードをどこに置く必要がありますか?

私は自分の店を次のように宣言します:

Images = new FS.Collection("images", {
    stores: [
        new FS.Store.FileSystem("something", {
            transformWrite: function (fileObj, readStream, writeStream) {
                // do transformations
            }           
        })]
    });

アップロードは次のように行われます。

FS.Utility.eachFile(event, function (file) {
    var newFile = new FS.File(file);
    newFile.uploadedFrom = Meteor.userId();

    data = Images.insert(newFile, function (error, fileObject) {});
});

ばかげた質問だと思いますが、そのコードをどこに置くべきか本当にわかりません...

4

2 に答える 2

1

アップロードはコレクションの挿入時に行われるため、その前に権利を設定できるはずです。chunkSize

FS.Utility.eachFile(event, function (file) {
    var newFile = new FS.File(file);
    newFile.uploadedFrom = Meteor.userId();

    var maxChunk = 2097152;
    FS.config.uploadChunkSize =
      ( newFile.original.size < 10*maxChunk ) ? newFile.original.size/10 : maxChunk;

    data = Images.insert(newFile, function (error, fileObject) {});
});
于 2015-12-15T17:09:31.233 に答える
0

また、使用FS.EventHandlers.insertFilesしていて読み込みバーが表示されない場合は、クライアント コードで次の関数を作成します。

/**
 * Replace for original FS.EventHandlers.insertFiles function.
 */
function cfsInsertFiles(collection, options) {
  options = options || {};
  var afterCallback = options.after;
  var metadataCallback = options.metadata;

  function insertFilesHandler(event) {
    FS.Utility.eachFile(event, function (file) {
      var f = new FS.File(file);
      var maxChunk = 2097152;
      FS.config.uploadChunkSize =
        (f.original.size < 10 * maxChunk) ? f.original.size / 10 : maxChunk;
      if (metadataCallback) {
        FS.Utility.extend(f, metadataCallback(f));
      }
      collection.insert(f, afterCallback);
    });
  }

  return insertFilesHandler;
}

そして最後に代わりにそれを使用してFS.EventHandlers.insertFilesください。例えば:

Template.files.events({
    'dropped .imageArea': cfsInsertFiles(Images, {
      metadata: function (fileObj) {
        return {
          owner: Meteor.userId(),
          foo: "bar"
        };
      },
      after: function (error, fileObj) {
        console.log("Inserted", fileObj.name);
      }
    })
});
于 2016-04-29T14:40:44.763 に答える