簡體   English   中英

將文件上傳到Cloudinary流星

[英]Upload file to Cloudinary Meteor

我正在使用以下html允許用戶上傳圖像:

<input class="upload" type="file" id="upload">

我有以下方法可以上傳到Cloudinary:

      cloud : function (source) {
      cloudinary.uploader.upload(source, function(result) { console.log(result) }, 
      { public_id: "test" });

  }, 

然后執行以下操作來檢測輸入並調用該方法:

'change #upload': function(event, template) {
          var imgVal = document.getElementById("upload");
          Meteor.call("cloud",imgVal);
      },

我收到此錯誤:

Exception while invoking method 'cloud' TypeError: Object #<Object> has no method 'match'
I20150813-10:10:38.007(-4)?     at C:\Users\Raj\art\.meteor\local\isopacks\npm-container\npm\node_modules\cloudinary\lib\uploader.js:61:34
I20150813-10:10:38.007(-4)?     at call_api (C:\Users\Raj\art\.meteor\local\isopacks\npm-container\npm\node_modules\cloudinary\lib\uploader.js:368:22)
I20150813-10:10:38.008(-4)?     at Object.exports.upload (C:\Users\Raj\art\.meteor\local\isopacks\npm-container\npm\node_modules\cloudinary\lib\uploader.js:58:12)
I20150813-10:10:38.008(-4)?     at [object Object].Meteor.methods.cloud (app\art.js:132:28)
I20150813-10:10:38.008(-4)?     at maybeAuditArgumentChecks (packages/ddp/livedata_server.js:1617:1)
I20150813-10:10:38.008(-4)?     at packages/ddp/livedata_server.js:648:1
I20150813-10:10:38.008(-4)?     at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
I20150813-10:10:38.008(-4)?     at packages/ddp/livedata_server.js:647:1
I20150813-10:10:38.009(-4)?     at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
I20150813-10:10:38.009(-4)?     at [object Object]._.extend.protocol_handlers.method (packages/ddp/livedata_server.js:646:1)
=> Meteor server restarted

我該怎么做才能解決此問題?

圖片上傳功能不支持Meteor.call功能。

嘗試:

'yourcollection'.allow({ <-- without the ''.
  insert: function() {return true},
  update: function() {return true},
});

把它放在你的lib / yourcollection.js中

cloudinary.uploader.upload期望第一個參數file為字符串。 您正在發送HTMLInputElement

您可以使用files屬性和FileReader從輸入元素中將所選文件提取為base64編碼的字符串:

'change #upload': function(event, template) {
    var imgVal = document.getElementById("upload");
    var files = imgVal.files; // FileList object

    // Loop through the FileList and upload each image file.
    for (var i = 0, f; f = files[i]; i++) {

      // Only process image files.
      if (!f.type.match('image.*')) {
        continue;
      }

      var reader = new FileReader();

      // Closure to capture the file information.
      reader.onload = (function(theFile) {
        return function(e) {
          Meteor.call("cloud",e.target.result);
        };
      })(f);

      // Read in the image file as a data URL.
      reader.readAsDataURL(f);
    }
  },

(來源取自http://www.html5rocks.com/zh-CN/tutorials/file/dndfiles/ 。)

請注意,cloudinary_npm是為服務器端操作而設計的-但是,我相信上面的代碼會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM