0

私は画像を提出しようとしています..そして、私は過去2日間これにいました。とてもシンプルに思えますが、思い通りにできません。

collectionFS の例 (および私が見つけることができる他のすべての例) では、「変更」と呼ばれるイベントを使用しています。 https://github.com/CollectionFS/Meteor-CollectionFS

このイベントは、ユーザーが画像 (または任意のファイル) をアップロードするたびにファイルを更新して保存します。保存するために「送信」を押す必要はありません。

これは物事を行う正しい方法ですか?イベントを「フォームの送信」イベントにブレンドできるように変更しようとしていますが、機能していないようです。

 'submit form': function(event, template) {
  console.log('this logs')

  FS.Utility.eachFile(event, function(file) {
    console.log('this doesnt log');
    Images.insert(file, function(err, fileObj) {
      if (err) {
        // handle error
      } else {
        // handle success depending what you need to do
        var userId = Meteor.userId();
        var imagesURL = {
          "profile.image": "/cfs/files/images/" + fileObj._id
        };
        Meteor.users.update(userId, {
          $set: imagesURL
        });
      }
    });
  });
}

ただし、これはファイルを保存していないようです。FS.Utility.eachFile 部分も実行しません。あらゆる種類のバリエーションを試しましたが、それらをすべてリストすると、非常に長い記事になるのではないかと心配しています。おそらく誰かが私を正しい方向に向けることができると思いましたか? ファイルを変数に保存してから挿入しようとしましたが、送信フォームで FS.Utility を実行できないようです。

どんな助けでも大歓迎です!

4

2 に答える 2

1

後でこれに苦労する人にとっては、現在 (2015 年 1 月 5 日) にパッケージが行っている仮定の問題です。cfs_base-packages.js 内:

FS.Utility.eachFile = function(e, f) {
  var evt = (e.originalEvent || e);
  var files = evt.target.files;
  if (!files || files.length === 0) {
    files = evt.dataTransfer ? evt.dataTransfer.files : [];
  }
  for (var i = 0; i < files.length; i++) {
    f(files[i], i);
  }
};     

あなたのイベントが次のように構造化されるのを探しています: event.originalEvent.target.files、ただし、送信によってトリガーされるイベントoriginalEvent.target: ""

Template.templateName.events({
      'submit .myForumClass': function(event, template) {
        event.preventDefault();
        event.originalEvent.target = {};
        event.originalEvent.target.files = event.currentTarget[0].files; 
       //0 is the position of the input field in the parent form
        FS.Utility.eachFile(event, function(file) {
         Images.insert(file, function (err, fileObj) {
          //stuff
          });
       });
     },
  });
于 2016-01-05T20:38:59.847 に答える
0

以下の例がお役に立てば幸いです。

<template name="fileupload">
  <form class="form-horizontal" role="form">
    <input type="file" name="...">
    <button type="submit" value="Update" class="btn btn-primary">Upload File</button>
  </form>
</template>

Template.fileupload.events({

  'submit form': function (event, template) {
    console.log("Submit form called");

    event.preventDefault();
    var fileObj = template.find('input:file');

    FilesCollection.insert(fileObj.files[0], function (err, fileObj) {
    });
  }
});
于 2015-06-18T17:25:55.903 に答える