2014-09-23 6 views
6

Ich habe seit einigen Tagen mit dem Speichern einer Datei, die ich aus einer HTTP-Anfrage abrufe, gekämpft. Hier ist mein Code:Speichern eines Bilds von URL in Parse.com mit 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); 
    } 
}); 

Der Fehler, den ich bekommen ist:

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) 

Der seltsamste Teil über all dies ist, dass der Fehler tritt nur auf, wenn ich die Linie umfassen object.set("icon1", imgFile) Ich bin in der Lage zu ändern der Standort von object ohne Problem. Der Fehler tritt nur auf, wenn ich versuche, die imgFile zu icon1

zu speichern. Jede Hilfe würde sehr geschätzt werden. Vielen Dank!

+0

Woher kommt die Variable 'object'? Was ist die Art von "Objekt"? – wayne

+0

Objekt ist ein PFObject vom Typ "OuterList". Das wird dir wahrscheinlich nicht viel helfen, aber –

Antwort

4

Gemäß der Dokumentation (https://parse.com/docs/js_guide#files) müssen Sie die Parse-Datei speichern, bevor Sie sie für ein anderes Objekt festlegen können.

Typisch:

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"); 
}); 

Ich schrieb auch diesen Teil der Funktion, das Versprechen Muster zu veranschaulichen, wie es ein wenig einfacher ist, wenn sie mit einer Reihe von Anfragen wie dies zu tun.

+0

Hallo Tom. Danke für den Vorschlag. Ich habe versucht, die ImgFile vor der Einstellung zu speichern, wie Sie beschrieben, aber ich habe leider immer noch den gleichen Fehler. Denkst du, dass es etwas mit dem Format der heruntergeladenen imgFile zu tun hat? –

+0

Können Sie Folgendes versuchen var imgFile = httpImgFile.buffer.toString ('base64'); –

+0

Danke für den Vorschlag Tom. Leider immer noch kein Glück: Fehler: Uncaught Das Erstellen einer Parse.File aus einem String wird noch nicht unterstützt. (Code: 141, Version: 1.2.21) eingegebener Ergebnisblock –