Estoy buscando una solución donde pueda proporcionarURL a imagen específica y luego con Javascript recupero datos de esa imagen. Ya encontré que no puedo simplemente extraer el archivo, ¿entonces tal vez la matriz de bytes o la base64 funcionarán?
Para ser específico antes de que alguien rechace esa pregunta: quiero analizar la URL y obtener la imagen en mi servidor de cualquier forma. Hay muchas preguntas similares, pero ninguna de ellas responde a esta.
¿Para qué necesito eso? Tengo acceso a la API, donde también recibo las URL de la imagen, pero quiero que se carguen en mi servidor a través de Background Job
en el servicio Parse.com (algo así como trabajo CRON). Sé cómo vincular archivos con ParseObject
, pero no puedo encontrar una solución para descargar la imagen directamente a ParseCloud
y vincularlo.
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);
});
});
Respuestas
1 para la respuesta № 1Puedes usar parse-image
módulo en Cloud Code como en su documentación
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.
}
});
Con el código anterior, puede obtener datos de imagen en Buffer usando image.data()
. Para obtener datos de base64, use image.data().toString("base64")