2014-09-23 2 views
6

Я борется с сохранением файла, который я получаю из HTTP-запроса в течение нескольких дней. Вот мой код:Сохранение изображения из URL-адреса в Parse.com с помощью CloudCode

Parse.Cloud.httpRequest({ 
    url: "https://ss1.4sqi.net/img/categories_v2/food/vietnamese_88.png", 
    success: function(httpImgFile) 
    { 
     console.log("httpImgFile: " + String(httpImgFile.buffer)); 
     var imgFile = new Parse.File("imgFile1.png", httpImgFile.buffer);            
     object.set("location", "newYork"); //object is a PFObject retrieved earlier 
     object.set("icon1", imgFile); 
     object.save(null, { 
      success: function(gameScore) { 
      response.success("saved object"); 
      }, 
      error: function(gameScore, error) { 
      response.error("failed to save object"); 
      } 
     });  
    }, 
    error: function(httpResponse) 
    { 
     console.log("unsuccessful http request"); 
     response.error(responseString); 
    } 
}); 

Ошибки я получаю:

Failed with: TypeError: Cannot call method 'then' of undefined 
    at Object.b.File.save (Parse.js:2:14963) 
    at null.<anonymous> (Parse.js:2:30041) 
    at e (Parse.js:2:6339) 
    at Parse.js:2:7092 
    at g (Parse.js:2:6829) 
    at c.extend.then (Parse.js:2:7077) 
    at Parse.js:2:30016 
    at Array.forEach (native) 
    at Function.x.each.x.forEach (Parse.js:1:661) 
    at Function.b.Object._deepSaveAsync (Parse.js:2:29993) 

Самая странная часть обо всем этом является то, что ошибка возникает только тогда, когда я включаю линии object.set("icon1", imgFile) Я могу изменить на странице object нет проблем. Ошибка возникает только при попытке сохранить imgFile до icon1

Любая помощь будет принята с благодарностью. Благодаря!

+0

Где ваша переменная 'object'? Каков тип 'объекта'? – wayne

+0

Объект представляет собой объект PFO типа «OuterList». Это, вероятно, не поможет вам, хотя –

ответ

4

В соответствии с документацией (https://parse.com/docs/js_guide#files) вам необходимо сохранить файл анализа, прежде чем вы сможете установить его на другой объект.

правило:

imgFile.save().then(function() { 

    ... 
    object.set("icon1", imgFile); 

    return object.save(); 

}).then(function (gameScore) { 
    response.success("saved object"); 
}, function (error) { 
    response.error("failed to save object"); 
}); 

я переписал эту часть функции, чтобы проиллюстрировать рисунок обещание, поскольку это немного легче, когда дело с серией запросов, как это.

+0

Привет, Том. Спасибо за предложение. Я попытался сохранить imgFile перед настройкой, как вы описали, но я до сих пор сталкиваюсь с такой же ошибкой. Считаете ли вы, что это имеет какое-то отношение к формату загруженного imgFile? –

+0

Можете ли вы попробовать следующий var imgFile = httpImgFile.buffer.toString ('base64'); –

+0

Спасибо за предложение Tom. К сожалению, еще не повезло: Ошибка: не удалось создать Parse.File из String еще не поддерживается. (Код: 141, Версия: 1.2.21) Введенный блок результатов –