Je recherche une solution où je peux fournirURL vers une image spécifique puis avec Javascript je récupère les données de cette image. J'ai déjà constaté que je ne pouvais pas simplement tirer un fichier, alors peut-être que le tableau d'octets ou la base64 suffiraient?
Pour être précis avant que quelqu'un ne vote contre cette question: je veux analyser l'URL et obtenir l'image sur mon serveur sous n'importe quelle forme. Il y a beaucoup de questions similaires, mais aucune ne répond à celle-ci.
Pourquoi ai-je besoin de ça? J'ai accès à l'API où je reçois également des URL d'image, mais je veux qu'elles soient téléchargées sur mon serveur via Background Job
dans le service Parse.com (quelque chose comme CRON job). Je sais comment lier un fichier avec ParseObject
, mais je ne trouve pas de solution pour télécharger l'image directement sur ParseCloud
et le lier.
var Image = require("parse-image");
Parse.Cloud.job("getImagesJob", function(request, status) {
Parse.Cloud.useMasterKey();
var beerObj = Parse.Object.extend("My_class");
var query = new Parse.Query(beerObj);
query.first().then(function(objs) {
var brew = objs.get("brewery");
var bname = objs.get("beer_name");
//var fullName = brew + " " + bname;
var fullName = "Browar Name";
console.log(fullName);
return Parse.Cloud.httpRequest({
method: "GET",
url: "api server address",
headers: {
"Content-Type": "application/json;charset=utf-8"
},
params: {
q : fullName,
client_id : "...",
client_secret : "..."
}
}).then(function(httpResponse) {
var json = JSON.parse(httpResponse.text);
if(json.meta.code === 200){
if(json.response.beers.count > 0){
if(json.response.beers.items[0].beer.beer_label === "/default.png"){
console.log("brak etykiety dla " + fullName);
} else {
console.log("znaleziono etykietę dla " + fullName);
Parse.Cloud.httpRequest({ //NOT REACHING
url: json.response.beers.items[0].beer.beer_label,
success: function(response) {
// The file contents are in response.buffer.
var image = new Image();
return image.setData(response.buffer, {
success: function() {
objs.set("logo", image.data());
console.log("udalo sie dolaczyc");
},
error: function(error) {
// The image data was invalid.
console.error(error);
}
})
},
error: function(error) {
// The networking request failed.
}
});
}
} else {
// daj cokolwiek żeby się nie zacięło na jednym
console.log("Brak danych dla piwa: " + fullName);
}
}
}, function(httpResponse) {
console.error("Request failed with response code " + httpResponse.status + httpResponse.text);
});
}).then(function(obj) {
status.success("Zrobione");
}, function(error) {
status.error(error);
});
});
Réponses:
1 pour la réponse № 1Vous pouvez utiliser parse-image
module dans Cloud Code comme dans leur Documentation
var Image = require("parse-image");
Parse.Cloud.httpRequest({
url: YOUR_URL,
success: function(response) {
// The file contents are in response.buffer.
var image = new Image();
return image.setData(response.buffer, {
success: function() {
console.log("Image is " + image.width() + "x" + image.height() + ".");
},
error: function(error) {
// The image data was invalid.
}
})
},
error: function(error) {
// The networking request failed.
}
});
Avec le code ci-dessus, vous pouvez obtenir des données d'image dans le tampon en utilisant image.data()
. Pour obtenir des données base64, utilisez image.data().toString("base64")