comment envoyer l'image à un serveur http.post en javascript et en magasin en base64 dans mongodb
J'ai du mal à entrer dans les requêtes http sur le côté client de stocker des images sur le côté serveur à l'aide de mongodb. J'apprécie beaucoup aider. J'ai besoin d'un exemple simple de la façon dont j'ai ajouter un fichier image sous forme de données dans une requête http post comme XMLhttprequest. Permet de dire, je sais que l'url de la servermethod. La source de l'image est définie dans
imgsrc
un nom de fichier est stocké dans
name
J'ai ce guichet:
var http = new XMLHttpRequest();
httpPost.onreadystatechange = function(err) {
if (httpPost.readyState == 4 && httpPost.status == 200){
console.log(httpPost.responseText);
} else {
console.log(err);
}
}
var path = "http://127.0.0.1:8000/uploadImage/"+name;
httpPost.open("POST", path, true);
//I guess I have to add the imagedata into the httpPost here, but i dont know how
httpPost.send(null);
Puis sur le server-side sur le chemin, la méthode suivante sera appelée, et je veux stocker l'url de l'image à l'encodage base64 dans mongodb. Comment puis-je accéder à l'image de la httpPost?
function postNewImageType(req, res, next){
var newImageTypeData = {
name: req.params.name,
image: "placeholder.png"
}
var data = //how to access the image?
var imageBuffer = decodeBase64Image(data);
fs.writeFile(cfg.imageFolger+newImageTypeData._id+'.jpeg', imageBuffer.data, function(err){
if (err) return new Error(err);
newImageTypeData.set({image:newImageTypeData._id+'.jpeg'});
var image = new ImageType(newImageData);
});
imagetype.save(function (err) {
if (error) {return next(new restify.InvalidArgumentError(JSON.stringify(error.errors)));}
else { res.send(201, imagetype);}
});
}
OriginalL'auteur MojioMS | 2016-01-24
Vous devez vous connecter pour publier un commentaire.
Il y a un certain nombre de façons que vous pouvez envoyer vos données d'image dans la demande au serveur, mais tous impliquent l'appel de la
send
méthode de votre objet XMLHttpRequest avec les données que vous souhaitez envoyer en argument.La
send
méthode à la fois envoie la demande au serveur distant, et définit son argument que le corps de la requête. Depuis que vous êtes enceinte, encodé en Base64 des données d'image sur votre serveur, vous devez d'abord convertir votre fichier image en Base64 des données sur le client.La façon la plus simple pour convertir une image en Base64 sur le client est en chargement de l'image comme un élément de l'image, le dessin d'un élément canvas, et de la représentation Base64 de la toile les données de l'image.
Qui pourrait ressembler à celui-ci (étant donné que l'URL de l'image d'origine est stockée dans une variable nommée
imgsrc
, et le nom est stocké dansname
comme indiqué):Lorsque la demande est reçue par le serveur, le corps de la requête contiendra la chaîne JSON avec votre image en Base64. Puisque vous n'avez pas fourni l'infrastructure de serveur ou de pilote de base de données que vous utilisez pour Mongo, j'ai adapté ton code en supposant que vous êtes à l'aide de l'Express et de la Mangouste avec un ImageType modèle déjà définies dans votre application.
Puisque vous pouvez toujours construire le nom de fichier de l'image, enregistrement à partir de son
_id
propriété et votre image de chemin d'accès au dossier, il ne fait pas nécessairement sens de sauvegarder que comme une propriété sur le dossier, mais j'ai conservé les fonctionnalités sont là, qui vous demandera de sauvegarder un enregistrement de deux fois dans un cycle de la demande.J'ai aussi changé la façon dont les erreurs du système de fichiers d'appels sont traités. Le 'err', vous obtenez en retour à partir d'une erreur de système de fichiers est déjà un objet d'Erreur, et devront être traitées par votre serveur, d'une certaine façon.
OriginalL'auteur RickyTomatoes