Closed benel closed 2 years ago
Merci. faire nos tests sur RESTClient a un rapport avec "attention à faire vos tests sur vos propres objets et non sur ceux qui sont nécessaires aux tests." que vous disiez plus tot?
Les deux sont complémentaires.
Autrement dit, il y a 8 items qui ont de la valeur (ceux qui ont des vignettes) : ils sont utilisés par les tests automatisés sur les postes des 50 étudiants d'IF05, et par le serveur d'intégration continue qui est appelé à chaque mise à jour d'une pull request. Ce sont les 8 qu'il ne faut surtout pas modifier.
Vous pouvez :
+
) avant de les modifier.https://addons.mozilla.org/fr/firefox/addon/restclient/
Cela vous permet de vous focaliser sur les requêtes HTTP elles-mêmes sans vous embêter pour l'instant avec les particularités de votre environnement de développement.
Apparemment, on peut l'envoyer :
- dans le json dans l'attribut data
- en multipart/related:
Dans les versions précédentes de CouchDB, il y avait une manière beaucoup plus simple de faire (mais plus vieillotte avec le mécanisme d'upload à partir d'un formulaire HTML hyper classique). Je suis étonné qu'elle ne soit plus documentée parce que je pense qu'elle existe toujours...
Dans les versions précédentes de CouchDB, il y avait une manière beaucoup plus simple de faire (mais plus vieillotte avec le mécanisme d'upload à partir d'un formulaire HTML hyper classique). Je suis étonné qu'elle ne soit plus documentée parce que je pense qu'elle existe toujours...
En fait les pièces jointes ont leur propre URI : https://docs.couchdb.org/en/2.3.1/api/document/attachments.html#put--db-docid-attname
Attention, si c'est du binaire (cas général), vous devez les encoder en base 54.
Du coup si j'ai bien compris une fois qu'on a notre file on peut faire
db.post({_id : xxx, _attachments : { file.name : { "content_type": file.type, "data": file}}});
quelque chose comme ça?
Du coup si j'ai bien compris une fois qu'on a notre file on peut faire
db.post({_id : xxx, _attachments : { file.name : { "content_type": file.type, "data": file}}});
quelque chose comme ça?
peut-être il faut utiliser la méthode put ?
Du coup si j'ai bien compris une fois qu'on a notre file on peut faire
db.post({_id : xxx, _attachments : { file.name : { "content_type": file.type, "data": file}}});
quelque chose comme ça?peut-être il faut utiliser la méthode put ?
Mr. Benel a dit que l'on n'avait que post sur Hypertopic, mais que c'était pareil que put
@Ocynox
_id : xxx
Si xxx est l'identifiant de l'item.
{ file.name : {
Si ce n'est que la clef devrait être la valeur de file.name. Du coup ce serait { [file.name]: {
.
"data": file
Le paramètre de data
doit être une chaîne de caractère égale à l'encodage en base 64 du contenu du fichier.
Et attention, si vous faites ça (avec la bonne révision), vous effacez tout le contenu actuel de l'item (ses attributs, ses catégories). Donc il vous faudrait fusionner les deux.
L'autre manière est celle que je viens de vous indiquer : en partant de l'URI de la pièce jointe (comme cela vous n'avez pas à vous préoccuper de l'item).
Mr. Benel a dit que l'on n'avait que post sur Hypertopic, mais que c'était pareil que put
C'est équivalent (quand on a des identifiants dans le contenu) mais à condition d'adapter les URI...
Voici une pièce jointe ultra-secrète en Base64 :
AAABAAEAICAAAAEACACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAG4C0AAAagAAAG4AAE1WjADdVowAALJIALJPGAAMukgAbKlsABzGSAAMzkgAue8cAADeSACM9kgAwhccADVWkAAAbgQAdg7UAN1akAAAtkwAAL5MAGypcACJvtgAOY6QAFTeTACJXtwAkPpMAAUOTAAx1pAApjsgAABuCAC+SyAAALpQAAy6UABwqXQAMQaYAFj2UAA1NpgAeXrgALY/JAAAdgwAFLpUAMpXJAAAvlQAulskAAyODABwqXgAwmskAADuVAAc7lQAFV7kAJD+VAB98uAANXLkABAQEAAAehAAAH4QAD3PLAAAwlgAaKl8AHStfADGYygAMbrkAATSWADObygAYYqcAIWC6AAANcwAAH4UAHStgAP///wAAPpcAAECXACaHzAAlQZcAFEKXABRPqQAzi8wAEXWoABthuwAGBgYAAB+GAABOlwAAIYYAMpfMAAAxmAAAMpgACTKYAAAnhgAynMwAEGapAAA+mAAxhc0AITKGACyHzQAAQpgANIrNABordAAjXrwAAA91ACKFuwAAIIcAACGHAAAymQAAM5kAADSZADSbzQA1m80AADWZAAI3mQAZLYcAInq8ACREmQAif7wADlKrAAgICAA1k84AJIm8AAAiiAAma70ANZnOAAMmiAAAM5oAADSaAAE0mgAANZoAATWaADaczgAmVpkAN5/OAA1pqwAddr0AE22rABNSrAAVdasAABF3AAAjiQADUZoAL5fPAAAliQACNJsAPWCsAAA1mwA3nM8AAjabADadzwACN5sAOKHPACForAACPZsAC0GbAHyGmQB+iJkAABJ4ABJovwAUXa0AACSKADderQADM5wAJZC+AAM4nAA4n9AAAVqbADig0AAodr8AQEBAACI0igAmR5wAAUycAAATeQA5ldEAJ4q/AAAliwABNp0ABjadAAQ5nQA5odEAAkyvAANCnQAYacEANZjSAAAnjAAnj8AAIGSvABAvjAAKPJ4AOqTSACI2jAAAFXsAACaNAAAnjQAAKI0ADCiNACl+wgAjOI0AKYfCAAAVfAAAFnwACVOfAAJUnwAAKY4AASqOABlksQApksIAAz2gABRQsgAHRKAAE3SxABh1sQArgsMAABd9AAAojwAAKY8AACqPAAArjwAZZ7IAHGeyACl0xAAaKVgARUVFAAlJoQAVXLMAABd+AAAYfgAAGX4AACqQAAArkAA+p9YAIjBZACQ6kAAlhsUAABl/AAAqkQAAK5EAACyRABtrtAAEPqMAJDuRAFJrogAACW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0emUXR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQ3AEdHnhlvb29vb29vb29vb29vb29vb29vb29vb29vb+UAR0dLLGlpaWlpaWlpaWlugRNMaWlpaWlpaWlpaWlpRgBHR3HiLCEhISEhISEhISWYme8iISEhISEhISEhIWlGAEdHcdYUBgYGBgYGBgYGJZiZ7wgGBgYGBgYGBgYGaUYAR0dLwOvq6erq4+Pp6erqGRsK6unj6unj6urj6ulpRgBHRzSt1tXU1dXJydXU1Q0EuMfX1cnV1MnV1cnV1Gk9AEdHG52/v7+/v7+/v7+/l5ItB+O/v7+/v7a/v7+/aS8AR0cOd76tra2tra2tra3duxIBtq2tra2tna2tra1XLwBHR+5FiXd3d3d3d3d3jE+72csxd3d3d3d3d3d3dzsvAEdHwyl3Z1RnZ2dnZ1R3P7tNBBhnZ2dnZ2dUZ2dmLC8AR0fDEUU4ODg4ODg4OJeLgoSEqyo4ODg4ODg4ODgGLwBHR7zoKSkpKSnKHCI2K4BrX12khXpUOSkpKSkpKeIvAEdHvN8RAxECWTWAt3hdzGtspbjnVSCpAwMDAgMC1C8AR0enxejh4OBZoKIQQtGKopB2QrMoVbLh4eHg4eC+IwBHR6eq073gEdmlyHMPCzJK2nga0qQgCNPT09PT050jAEdHXogfts1Q0m5yizZpGEqpxK9YJ05yF7jBvb29iRYAR0fmv2ndPmvYaataspYgQVOc0Wmu54exdbmqqqpnFgBHR6g7aboMVcttzg+HtysglnvMQ1wSs5u1uoiaiFIWAEdHqDtpaZGhzh3ZTqxbsJNqoz5aU+yKfCbCLmREKRYAR0eoO2lpaX1h5MJwJ2lpaWlgPgzP7KNpatjElUQfFgBHR6g7aWmRzTB2JGDLjWlpaXMBuq/CtLBpM4CA8OAJAEdHqDtpM3Aox0l/zh5jjWlqF0NphnmQhmntOtDGqgkAR0eoO2kolE5/aWnagqShaTHEn2kmZWUmaWmPfgbg2wBHR6g7aYM6zn1paSQ63mlpJDVpaWhcXGhpaWlpaeLbAEdHqDtpbY98aWlpaY97Vt2gc2lpaWlpaWlpaWlpaRYAR0eoO2lpV2lpaWlpaWlIduSFamlpaWlpaWlpaWlpPQBHR6g7aVdpaWlpaWlpaVzRHt1paWlpaWlpaWlpaWk8AEdHcdXq4urq6urq6urqFcg/QOrq6urq6urq6urqV2I3R0eOBQUFExMTExMTExMTExMTExMTExMTExMTExMTjtxHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Expliquez ci-dessous quelles requêtes faire en HTTP pour la créer comme pièce jointe de type image/vnd.microsoft.icon
à l'objet {"_id:"007", "name":"James Bond"}
(avec les deux manières : celle en modifiant l'objet et celle en modifiant uniquement la pièce jointe).
en HTTP
Donc sans javascript. Juste en donnant la méthode HTTP, les entêtes et le corps de la requête.
Donc en modifiant l'objet ça serait
db.post({"_id" : "007", "name" : "James Bond", "_attachments" : {
"fichierSecret" : { "content_type": "image/vnd.microsoft.icon",
"data": "AAABAAEAICAAAAEACACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAG4C0AAAagAAAG4AAE1WjADdVowAALJIALJPGAAMukgAbKlsABzGSAAMzkgAue8cAADeSACM9kgAwhccADVWkAAAbgQAdg7UAN1akAAAtkwAAL5MAGypcACJvtgAOY6QAFTeTACJXtwAkPpMAAUOTAAx1pAApjsgAABuCAC+SyAAALpQAAy6UABwqXQAMQaYAFj2UAA1NpgAeXrgALY/JAAAdgwAFLpUAMpXJAAAvlQAulskAAyODABwqXgAwmskAADuVAAc7lQAFV7kAJD+VAB98uAANXLkABAQEAAAehAAAH4QAD3PLAAAwlgAaKl8AHStfADGYygAMbrkAATSWADObygAYYqcAIWC6AAANcwAAH4UAHStgAP///wAAPpcAAECXACaHzAAlQZcAFEKXABRPqQAzi8wAEXWoABthuwAGBgYAAB+GAABOlwAAIYYAMpfMAAAxmAAAMpgACTKYAAAnhgAynMwAEGapAAA+mAAxhc0AITKGACyHzQAAQpgANIrNABordAAjXrwAAA91ACKFuwAAIIcAACGHAAAymQAAM5kAADSZADSbzQA1m80AADWZAAI3mQAZLYcAInq8ACREmQAif7wADlKrAAgICAA1k84AJIm8AAAiiAAma70ANZnOAAMmiAAAM5oAADSaAAE0mgAANZoAATWaADaczgAmVpkAN5/OAA1pqwAddr0AE22rABNSrAAVdasAABF3AAAjiQADUZoAL5fPAAAliQACNJsAPWCsAAA1mwA3nM8AAjabADadzwACN5sAOKHPACForAACPZsAC0GbAHyGmQB+iJkAABJ4ABJovwAUXa0AACSKADderQADM5wAJZC+AAM4nAA4n9AAAVqbADig0AAodr8AQEBAACI0igAmR5wAAUycAAATeQA5ldEAJ4q/AAAliwABNp0ABjadAAQ5nQA5odEAAkyvAANCnQAYacEANZjSAAAnjAAnj8AAIGSvABAvjAAKPJ4AOqTSACI2jAAAFXsAACaNAAAnjQAAKI0ADCiNACl+wgAjOI0AKYfCAAAVfAAAFnwACVOfAAJUnwAAKY4AASqOABlksQApksIAAz2gABRQsgAHRKAAE3SxABh1sQArgsMAABd9AAAojwAAKY8AACqPAAArjwAZZ7IAHGeyACl0xAAaKVgARUVFAAlJoQAVXLMAABd+AAAYfgAAGX4AACqQAAArkAA+p9YAIjBZACQ6kAAlhsUAABl/AAAqkQAAK5EAACyRABtrtAAEPqMAJDuRAFJrogAACW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0emUXR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQ3AEdHnhlvb29vb29vb29vb29vb29vb29vb29vb29vb+UAR0dLLGlpaWlpaWlpaWlugRNMaWlpaWlpaWlpaWlpRgBHR3HiLCEhISEhISEhISWYme8iISEhISEhISEhIWlGAEdHcdYUBgYGBgYGBgYGJZiZ7wgGBgYGBgYGBgYGaUYAR0dLwOvq6erq4+Pp6erqGRsK6unj6unj6urj6ulpRgBHRzSt1tXU1dXJydXU1Q0EuMfX1cnV1MnV1cnV1Gk9AEdHG52/v7+/v7+/v7+/l5ItB+O/v7+/v7a/v7+/aS8AR0cOd76tra2tra2tra3duxIBtq2tra2tna2tra1XLwBHR+5FiXd3d3d3d3d3jE+72csxd3d3d3d3d3d3dzsvAEdHwyl3Z1RnZ2dnZ1R3P7tNBBhnZ2dnZ2dUZ2dmLC8AR0fDEUU4ODg4ODg4OJeLgoSEqyo4ODg4ODg4ODgGLwBHR7zoKSkpKSnKHCI2K4BrX12khXpUOSkpKSkpKeIvAEdHvN8RAxECWTWAt3hdzGtspbjnVSCpAwMDAgMC1C8AR0enxejh4OBZoKIQQtGKopB2QrMoVbLh4eHg4eC+IwBHR6eq073gEdmlyHMPCzJK2nga0qQgCNPT09PT050jAEdHXogfts1Q0m5yizZpGEqpxK9YJ05yF7jBvb29iRYAR0fmv2ndPmvYaataspYgQVOc0Wmu54exdbmqqqpnFgBHR6g7aboMVcttzg+HtysglnvMQ1wSs5u1uoiaiFIWAEdHqDtpaZGhzh3ZTqxbsJNqoz5aU+yKfCbCLmREKRYAR0eoO2lpaX1h5MJwJ2lpaWlgPgzP7KNpatjElUQfFgBHR6g7aWmRzTB2JGDLjWlpaXMBuq/CtLBpM4CA8OAJAEdHqDtpM3Aox0l/zh5jjWlqF0NphnmQhmntOtDGqgkAR0eoO2kolE5/aWnagqShaTHEn2kmZWUmaWmPfgbg2wBHR6g7aYM6zn1paSQ63mlpJDVpaWhcXGhpaWlpaeLbAEdHqDtpbY98aWlpaY97Vt2gc2lpaWlpaWlpaWlpaRYAR0eoO2lpV2lpaWlpaWlIduSFamlpaWlpaWlpaWlpPQBHR6g7aVdpaWlpaWlpaVzRHt1paWlpaWlpaWlpaWk8AEdHcdXq4urq6urq6urqFcg/QOrq6urq6urq6urqV2I3R0eOBQUFExMTExMTExMTExMTExMTExMTExMTExMTjtxHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
}});
Voici une pièce jointe ultra-secrète en Base64 :
AAABAAEAICAAAAEACACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAG4C0AAAagAAAG4AAE1WjADdVowAALJIALJPGAAMukgAbKlsABzGSAAMzkgAue8cAADeSACM9kgAwhccADVWkAAAbgQAdg7UAN1akAAAtkwAAL5MAGypcACJvtgAOY6QAFTeTACJXtwAkPpMAAUOTAAx1pAApjsgAABuCAC+SyAAALpQAAy6UABwqXQAMQaYAFj2UAA1NpgAeXrgALY/JAAAdgwAFLpUAMpXJAAAvlQAulskAAyODABwqXgAwmskAADuVAAc7lQAFV7kAJD+VAB98uAANXLkABAQEAAAehAAAH4QAD3PLAAAwlgAaKl8AHStfADGYygAMbrkAATSWADObygAYYqcAIWC6AAANcwAAH4UAHStgAP///wAAPpcAAECXACaHzAAlQZcAFEKXABRPqQAzi8wAEXWoABthuwAGBgYAAB+GAABOlwAAIYYAMpfMAAAxmAAAMpgACTKYAAAnhgAynMwAEGapAAA+mAAxhc0AITKGACyHzQAAQpgANIrNABordAAjXrwAAA91ACKFuwAAIIcAACGHAAAymQAAM5kAADSZADSbzQA1m80AADWZAAI3mQAZLYcAInq8ACREmQAif7wADlKrAAgICAA1k84AJIm8AAAiiAAma70ANZnOAAMmiAAAM5oAADSaAAE0mgAANZoAATWaADaczgAmVpkAN5/OAA1pqwAddr0AE22rABNSrAAVdasAABF3AAAjiQADUZoAL5fPAAAliQACNJsAPWCsAAA1mwA3nM8AAjabADadzwACN5sAOKHPACForAACPZsAC0GbAHyGmQB+iJkAABJ4ABJovwAUXa0AACSKADderQADM5wAJZC+AAM4nAA4n9AAAVqbADig0AAodr8AQEBAACI0igAmR5wAAUycAAATeQA5ldEAJ4q/AAAliwABNp0ABjadAAQ5nQA5odEAAkyvAANCnQAYacEANZjSAAAnjAAnj8AAIGSvABAvjAAKPJ4AOqTSACI2jAAAFXsAACaNAAAnjQAAKI0ADCiNACl+wgAjOI0AKYfCAAAVfAAAFnwACVOfAAJUnwAAKY4AASqOABlksQApksIAAz2gABRQsgAHRKAAE3SxABh1sQArgsMAABd9AAAojwAAKY8AACqPAAArjwAZZ7IAHGeyACl0xAAaKVgARUVFAAlJoQAVXLMAABd+AAAYfgAAGX4AACqQAAArkAA+p9YAIjBZACQ6kAAlhsUAABl/AAAqkQAAK5EAACyRABtrtAAEPqMAJDuRAFJrogAACW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0emUXR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQ3AEdHnhlvb29vb29vb29vb29vb29vb29vb29vb29vb+UAR0dLLGlpaWlpaWlpaWlugRNMaWlpaWlpaWlpaWlpRgBHR3HiLCEhISEhISEhISWYme8iISEhISEhISEhIWlGAEdHcdYUBgYGBgYGBgYGJZiZ7wgGBgYGBgYGBgYGaUYAR0dLwOvq6erq4+Pp6erqGRsK6unj6unj6urj6ulpRgBHRzSt1tXU1dXJydXU1Q0EuMfX1cnV1MnV1cnV1Gk9AEdHG52/v7+/v7+/v7+/l5ItB+O/v7+/v7a/v7+/aS8AR0cOd76tra2tra2tra3duxIBtq2tra2tna2tra1XLwBHR+5FiXd3d3d3d3d3jE+72csxd3d3d3d3d3d3dzsvAEdHwyl3Z1RnZ2dnZ1R3P7tNBBhnZ2dnZ2dUZ2dmLC8AR0fDEUU4ODg4ODg4OJeLgoSEqyo4ODg4ODg4ODgGLwBHR7zoKSkpKSnKHCI2K4BrX12khXpUOSkpKSkpKeIvAEdHvN8RAxECWTWAt3hdzGtspbjnVSCpAwMDAgMC1C8AR0enxejh4OBZoKIQQtGKopB2QrMoVbLh4eHg4eC+IwBHR6eq073gEdmlyHMPCzJK2nga0qQgCNPT09PT050jAEdHXogfts1Q0m5yizZpGEqpxK9YJ05yF7jBvb29iRYAR0fmv2ndPmvYaataspYgQVOc0Wmu54exdbmqqqpnFgBHR6g7aboMVcttzg+HtysglnvMQ1wSs5u1uoiaiFIWAEdHqDtpaZGhzh3ZTqxbsJNqoz5aU+yKfCbCLmREKRYAR0eoO2lpaX1h5MJwJ2lpaWlgPgzP7KNpatjElUQfFgBHR6g7aWmRzTB2JGDLjWlpaXMBuq/CtLBpM4CA8OAJAEdHqDtpM3Aox0l/zh5jjWlqF0NphnmQhmntOtDGqgkAR0eoO2kolE5/aWnagqShaTHEn2kmZWUmaWmPfgbg2wBHR6g7aYM6zn1paSQ63mlpJDVpaWhcXGhpaWlpaeLbAEdHqDtpbY98aWlpaY97Vt2gc2lpaWlpaWlpaWlpaRYAR0eoO2lpV2lpaWlpaWlIduSFamlpaWlpaWlpaWlpPQBHR6g7aVdpaWlpaWlpaVzRHt1paWlpaWlpaWlpaWk8AEdHcdXq4urq6urq6urqFcg/QOrq6urq6urq6urqV2I3R0eOBQUFExMTExMTExMTExMTExMTExMTExMTExMTjtxHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Expliquez ci-dessous quelles requêtes faire en HTTP pour la créer comme pièce jointe de type
image/vnd.microsoft.icon
à l'objet{"_id:"007", "name":"James Bond"}
(avec les deux manières : celle en modifiant l'objet et celle en modifiant uniquement la pièce jointe).
pour le multipart/related je ne comprends pas du tout comment cela fonctionne, j'essaie de regarder sur internet
db.post({"_id" : "007", "name" : "James Bond", "_attachments" : {
"fichierSecret" : { "content_type": "image/vnd.microsoft.icon",
"data": "AAABAAEAICAAAAEACACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAG4C0AAAagAAAG4AAE1WjADdVowAALJIALJPGAAMukgAbKlsABzGSAAMzkgAue8cAADeSACM9kgAwhccADVWkAAAbgQAdg7UAN1akAAAtkwAAL5MAGypcACJvtgAOY6QAFTeTACJXtwAkPpMAAUOTAAx1pAApjsgAABuCAC+SyAAALpQAAy6UABwqXQAMQaYAFj2UAA1NpgAeXrgALY/JAAAdgwAFLpUAMpXJAAAvlQAulskAAyODABwqXgAwmskAADuVAAc7lQAFV7kAJD+VAB98uAANXLkABAQEAAAehAAAH4QAD3PLAAAwlgAaKl8AHStfADGYygAMbrkAATSWADObygAYYqcAIWC6AAANcwAAH4UAHStgAP///wAAPpcAAECXACaHzAAlQZcAFEKXABRPqQAzi8wAEXWoABthuwAGBgYAAB+GAABOlwAAIYYAMpfMAAAxmAAAMpgACTKYAAAnhgAynMwAEGapAAA+mAAxhc0AITKGACyHzQAAQpgANIrNABordAAjXrwAAA91ACKFuwAAIIcAACGHAAAymQAAM5kAADSZADSbzQA1m80AADWZAAI3mQAZLYcAInq8ACREmQAif7wADlKrAAgICAA1k84AJIm8AAAiiAAma70ANZnOAAMmiAAAM5oAADSaAAE0mgAANZoAATWaADaczgAmVpkAN5/OAA1pqwAddr0AE22rABNSrAAVdasAABF3AAAjiQADUZoAL5fPAAAliQACNJsAPWCsAAA1mwA3nM8AAjabADadzwACN5sAOKHPACForAACPZsAC0GbAHyGmQB+iJkAABJ4ABJovwAUXa0AACSKADderQADM5wAJZC+AAM4nAA4n9AAAVqbADig0AAodr8AQEBAACI0igAmR5wAAUycAAATeQA5ldEAJ4q/AAAliwABNp0ABjadAAQ5nQA5odEAAkyvAANCnQAYacEANZjSAAAnjAAnj8AAIGSvABAvjAAKPJ4AOqTSACI2jAAAFXsAACaNAAAnjQAAKI0ADCiNACl+wgAjOI0AKYfCAAAVfAAAFnwACVOfAAJUnwAAKY4AASqOABlksQApksIAAz2gABRQsgAHRKAAE3SxABh1sQArgsMAABd9AAAojwAAKY8AACqPAAArjwAZZ7IAHGeyACl0xAAaKVgARUVFAAlJoQAVXLMAABd+AAAYfgAAGX4AACqQAAArkAA+p9YAIjBZACQ6kAAlhsUAABl/AAAqkQAAK5EAACyRABtrtAAEPqMAJDuRAFJrogAACW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0emUXR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQ3AEdHnhlvb29vb29vb29vb29vb29vb29vb29vb29vb+UAR0dLLGlpaWlpaWlpaWlugRNMaWlpaWlpaWlpaWlpRgBHR3HiLCEhISEhISEhISWYme8iISEhISEhISEhIWlGAEdHcdYUBgYGBgYGBgYGJZiZ7wgGBgYGBgYGBgYGaUYAR0dLwOvq6erq4+Pp6erqGRsK6unj6unj6urj6ulpRgBHRzSt1tXU1dXJydXU1Q0EuMfX1cnV1MnV1cnV1Gk9AEdHG52/v7+/v7+/v7+/l5ItB+O/v7+/v7a/v7+/aS8AR0cOd76tra2tra2tra3duxIBtq2tra2tna2tra1XLwBHR+5FiXd3d3d3d3d3jE+72csxd3d3d3d3d3d3dzsvAEdHwyl3Z1RnZ2dnZ1R3P7tNBBhnZ2dnZ2dUZ2dmLC8AR0fDEUU4ODg4ODg4OJeLgoSEqyo4ODg4ODg4ODgGLwBHR7zoKSkpKSnKHCI2K4BrX12khXpUOSkpKSkpKeIvAEdHvN8RAxECWTWAt3hdzGtspbjnVSCpAwMDAgMC1C8AR0enxejh4OBZoKIQQtGKopB2QrMoVbLh4eHg4eC+IwBHR6eq073gEdmlyHMPCzJK2nga0qQgCNPT09PT050jAEdHXogfts1Q0m5yizZpGEqpxK9YJ05yF7jBvb29iRYAR0fmv2ndPmvYaataspYgQVOc0Wmu54exdbmqqqpnFgBHR6g7aboMVcttzg+HtysglnvMQ1wSs5u1uoiaiFIWAEdHqDtpaZGhzh3ZTqxbsJNqoz5aU+yKfCbCLmREKRYAR0eoO2lpaX1h5MJwJ2lpaWlgPgzP7KNpatjElUQfFgBHR6g7aWmRzTB2JGDLjWlpaXMBuq/CtLBpM4CA8OAJAEdHqDtpM3Aox0l/zh5jjWlqF0NphnmQhmntOtDGqgkAR0eoO2kolE5/aWnagqShaTHEn2kmZWUmaWmPfgbg2wBHR6g7aYM6zn1paSQ63mlpJDVpaWhcXGhpaWlpaeLbAEdHqDtpbY98aWlpaY97Vt2gc2lpaWlpaWlpaWlpaRYAR0eoO2lpV2lpaWlpaWlIduSFamlpaWlpaWlpaWlpPQBHR6g7aVdpaWlpaWlpaVzRHt1paWlpaWlpaWlpaWk8AEdHcdXq4urq6urq6urqFcg/QOrq6urq6urq6urqV2I3R0eOBQUFExMTExMTExMTExMTExMTExMTExMTExMTjtxHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"}
}});
J'avais dit "sans javascript" ;)
Ça donne :
POST
/
{
"_id" : "007",
"name" : "James Bond",
"_attachments" : {
"fichierSecret" : {
"content_type": "image/vnd.microsoft.icon",
"data": "AAABAAEAICAAAAEACACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAG4C0AAAagAAAG4AAE1WjADdVowAALJIALJPGAAMukgAbKlsABzGSAAMzkgAue8cAADeSACM9kgAwhccADVWkAAAbgQAdg7UAN1akAAAtkwAAL5MAGypcACJvtgAOY6QAFTeTACJXtwAkPpMAAUOTAAx1pAApjsgAABuCAC+SyAAALpQAAy6UABwqXQAMQaYAFj2UAA1NpgAeXrgALY/JAAAdgwAFLpUAMpXJAAAvlQAulskAAyODABwqXgAwmskAADuVAAc7lQAFV7kAJD+VAB98uAANXLkABAQEAAAehAAAH4QAD3PLAAAwlgAaKl8AHStfADGYygAMbrkAATSWADObygAYYqcAIWC6AAANcwAAH4UAHStgAP///wAAPpcAAECXACaHzAAlQZcAFEKXABRPqQAzi8wAEXWoABthuwAGBgYAAB+GAABOlwAAIYYAMpfMAAAxmAAAMpgACTKYAAAnhgAynMwAEGapAAA+mAAxhc0AITKGACyHzQAAQpgANIrNABordAAjXrwAAA91ACKFuwAAIIcAACGHAAAymQAAM5kAADSZADSbzQA1m80AADWZAAI3mQAZLYcAInq8ACREmQAif7wADlKrAAgICAA1k84AJIm8AAAiiAAma70ANZnOAAMmiAAAM5oAADSaAAE0mgAANZoAATWaADaczgAmVpkAN5/OAA1pqwAddr0AE22rABNSrAAVdasAABF3AAAjiQADUZoAL5fPAAAliQACNJsAPWCsAAA1mwA3nM8AAjabADadzwACN5sAOKHPACForAACPZsAC0GbAHyGmQB+iJkAABJ4ABJovwAUXa0AACSKADderQADM5wAJZC+AAM4nAA4n9AAAVqbADig0AAodr8AQEBAACI0igAmR5wAAUycAAATeQA5ldEAJ4q/AAAliwABNp0ABjadAAQ5nQA5odEAAkyvAANCnQAYacEANZjSAAAnjAAnj8AAIGSvABAvjAAKPJ4AOqTSACI2jAAAFXsAACaNAAAnjQAAKI0ADCiNACl+wgAjOI0AKYfCAAAVfAAAFnwACVOfAAJUnwAAKY4AASqOABlksQApksIAAz2gABRQsgAHRKAAE3SxABh1sQArgsMAABd9AAAojwAAKY8AACqPAAArjwAZZ7IAHGeyACl0xAAaKVgARUVFAAlJoQAVXLMAABd+AAAYfgAAGX4AACqQAAArkAA+p9YAIjBZACQ6kAAlhsUAABl/AAAqkQAAK5EAACyRABtrtAAEPqMAJDuRAFJrogAACW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0emUXR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQ3AEdHnhlvb29vb29vb29vb29vb29vb29vb29vb29vb+UAR0dLLGlpaWlpaWlpaWlugRNMaWlpaWlpaWlpaWlpRgBHR3HiLCEhISEhISEhISWYme8iISEhISEhISEhIWlGAEdHcdYUBgYGBgYGBgYGJZiZ7wgGBgYGBgYGBgYGaUYAR0dLwOvq6erq4+Pp6erqGRsK6unj6unj6urj6ulpRgBHRzSt1tXU1dXJydXU1Q0EuMfX1cnV1MnV1cnV1Gk9AEdHG52/v7+/v7+/v7+/l5ItB+O/v7+/v7a/v7+/aS8AR0cOd76tra2tra2tra3duxIBtq2tra2tna2tra1XLwBHR+5FiXd3d3d3d3d3jE+72csxd3d3d3d3d3d3dzsvAEdHwyl3Z1RnZ2dnZ1R3P7tNBBhnZ2dnZ2dUZ2dmLC8AR0fDEUU4ODg4ODg4OJeLgoSEqyo4ODg4ODg4ODgGLwBHR7zoKSkpKSnKHCI2K4BrX12khXpUOSkpKSkpKeIvAEdHvN8RAxECWTWAt3hdzGtspbjnVSCpAwMDAgMC1C8AR0enxejh4OBZoKIQQtGKopB2QrMoVbLh4eHg4eC+IwBHR6eq073gEdmlyHMPCzJK2nga0qQgCNPT09PT050jAEdHXogfts1Q0m5yizZpGEqpxK9YJ05yF7jBvb29iRYAR0fmv2ndPmvYaataspYgQVOc0Wmu54exdbmqqqpnFgBHR6g7aboMVcttzg+HtysglnvMQ1wSs5u1uoiaiFIWAEdHqDtpaZGhzh3ZTqxbsJNqoz5aU+yKfCbCLmREKRYAR0eoO2lpaX1h5MJwJ2lpaWlgPgzP7KNpatjElUQfFgBHR6g7aWmRzTB2JGDLjWlpaXMBuq/CtLBpM4CA8OAJAEdHqDtpM3Aox0l/zh5jjWlqF0NphnmQhmntOtDGqgkAR0eoO2kolE5/aWnagqShaTHEn2kmZWUmaWmPfgbg2wBHR6g7aYM6zn1paSQ63mlpJDVpaWhcXGhpaWlpaeLbAEdHqDtpbY98aWlpaY97Vt2gc2lpaWlpaWlpaWlpaRYAR0eoO2lpV2lpaWlpaWlIduSFamlpaWlpaWlpaWlpPQBHR6g7aVdpaWlpaWlpaVzRHt1paWlpaWlpaWlpaWk8AEdHcdXq4urq6urq6urqFcg/QOrq6urq6urq6urqV2I3R0eOBQUFExMTExMTExMTExMTExMTExMTExMTExMTjtxHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
}
}
}
L'intérêt c'est que maintenant, vous pouvez le tester dans le RESTClient et voir si ça marche...
pour le multipart/related je ne comprends pas du tout comment cela fonctionne, j'essaie de regarder sur internet
Ce n'est pas la deuxième méthode que je vous demandais (elle est effectivement un peu compliquée avec ce format que vous ne connaissez pas). Je pensais à la troisième, celle qui utilise l'URI de la pièce jointe elle-même. C'est la méthode la plus simple des trois.
@Hypertopic/partage-de-recits-d-experience
Je ne sais pas pourquoi le ticket est dans ma colonne ("Being integrated and deployed"). À moins que je perde la tête, il ne me semble pas l'avoir "tiré" dans ma colonne (je vous rappelle que l'on ne "pousse" jamais un ticket dans la colonne de quelqu'un d'autre).
Merci de faire le point sur les sous-livrables terminés et de m'indiquer quelles cases je dois cocher.
Si les 5 sont cochées et qu'il y a une pull request validée, à ce moment là j'accepterai effectivement le ticket dans ma colonne. En attendant, elle devrait être dans In design & development
.
Merci d'avance.
Avec l'URI ça serait peut-être : Méthode : POST URI : /007/fichierSecret Corps:
{ "fichierSecret" : { "content_type": "image/vnd.microsoft.icon", "data": "AAABAAEAICAAAAEACACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAG4C0AAAagAAAG4AAE1WjADdVowAALJIALJPGAAMukgAbKlsABzGSAAMzkgAue8cAADeSACM9kgAwhccADVWkAAAbgQAdg7UAN1akAAAtkwAAL5MAGypcACJvtgAOY6QAFTeTACJXtwAkPpMAAUOTAAx1pAApjsgAABuCAC+SyAAALpQAAy6UABwqXQAMQaYAFj2UAA1NpgAeXrgALY/JAAAdgwAFLpUAMpXJAAAvlQAulskAAyODABwqXgAwmskAADuVAAc7lQAFV7kAJD+VAB98uAANXLkABAQEAAAehAAAH4QAD3PLAAAwlgAaKl8AHStfADGYygAMbrkAATSWADObygAYYqcAIWC6AAANcwAAH4UAHStgAP///wAAPpcAAECXACaHzAAlQZcAFEKXABRPqQAzi8wAEXWoABthuwAGBgYAAB+GAABOlwAAIYYAMpfMAAAxmAAAMpgACTKYAAAnhgAynMwAEGapAAA+mAAxhc0AITKGACyHzQAAQpgANIrNABordAAjXrwAAA91ACKFuwAAIIcAACGHAAAymQAAM5kAADSZADSbzQA1m80AADWZAAI3mQAZLYcAInq8ACREmQAif7wADlKrAAgICAA1k84AJIm8AAAiiAAma70ANZnOAAMmiAAAM5oAADSaAAE0mgAANZoAATWaADaczgAmVpkAN5/OAA1pqwAddr0AE22rABNSrAAVdasAABF3AAAjiQADUZoAL5fPAAAliQACNJsAPWCsAAA1mwA3nM8AAjabADadzwACN5sAOKHPACForAACPZsAC0GbAHyGmQB+iJkAABJ4ABJovwAUXa0AACSKADderQADM5wAJZC+AAM4nAA4n9AAAVqbADig0AAodr8AQEBAACI0igAmR5wAAUycAAATeQA5ldEAJ4q/AAAliwABNp0ABjadAAQ5nQA5odEAAkyvAANCnQAYacEANZjSAAAnjAAnj8AAIGSvABAvjAAKPJ4AOqTSACI2jAAAFXsAACaNAAAnjQAAKI0ADCiNACl+wgAjOI0AKYfCAAAVfAAAFnwACVOfAAJUnwAAKY4AASqOABlksQApksIAAz2gABRQsgAHRKAAE3SxABh1sQArgsMAABd9AAAojwAAKY8AACqPAAArjwAZZ7IAHGeyACl0xAAaKVgARUVFAAlJoQAVXLMAABd+AAAYfgAAGX4AACqQAAArkAA+p9YAIjBZACQ6kAAlhsUAABl/AAAqkQAAK5EAACyRABtrtAAEPqMAJDuRAFJrogAACW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0emUXR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQ3AEdHnhlvb29vb29vb29vb29vb29vb29vb29vb29vb+UAR0dLLGlpaWlpaWlpaWlugRNMaWlpaWlpaWlpaWlpRgBHR3HiLCEhISEhISEhISWYme8iISEhISEhISEhIWlGAEdHcdYUBgYGBgYGBgYGJZiZ7wgGBgYGBgYGBgYGaUYAR0dLwOvq6erq4+Pp6erqGRsK6unj6unj6urj6ulpRgBHRzSt1tXU1dXJydXU1Q0EuMfX1cnV1MnV1cnV1Gk9AEdHG52/v7+/v7+/v7+/l5ItB+O/v7+/v7a/v7+/aS8AR0cOd76tra2tra2tra3duxIBtq2tra2tna2tra1XLwBHR+5FiXd3d3d3d3d3jE+72csxd3d3d3d3d3d3dzsvAEdHwyl3Z1RnZ2dnZ1R3P7tNBBhnZ2dnZ2dUZ2dmLC8AR0fDEUU4ODg4ODg4OJeLgoSEqyo4ODg4ODg4ODgGLwBHR7zoKSkpKSnKHCI2K4BrX12khXpUOSkpKSkpKeIvAEdHvN8RAxECWTWAt3hdzGtspbjnVSCpAwMDAgMC1C8AR0enxejh4OBZoKIQQtGKopB2QrMoVbLh4eHg4eC+IwBHR6eq073gEdmlyHMPCzJK2nga0qQgCNPT09PT050jAEdHXogfts1Q0m5yizZpGEqpxK9YJ05yF7jBvb29iRYAR0fmv2ndPmvYaataspYgQVOc0Wmu54exdbmqqqpnFgBHR6g7aboMVcttzg+HtysglnvMQ1wSs5u1uoiaiFIWAEdHqDtpaZGhzh3ZTqxbsJNqoz5aU+yKfCbCLmREKRYAR0eoO2lpaX1h5MJwJ2lpaWlgPgzP7KNpatjElUQfFgBHR6g7aWmRzTB2JGDLjWlpaXMBuq/CtLBpM4CA8OAJAEdHqDtpM3Aox0l/zh5jjWlqF0NphnmQhmntOtDGqgkAR0eoO2kolE5/aWnagqShaTHEn2kmZWUmaWmPfgbg2wBHR6g7aYM6zn1paSQ63mlpJDVpaWhcXGhpaWlpaeLbAEdHqDtpbY98aWlpaY97Vt2gc2lpaWlpaWlpaWlpaRYAR0eoO2lpV2lpaWlpaWlIduSFamlpaWlpaWlpaWlpPQBHR6g7aVdpaWlpaWlpaVzRHt1paWlpaWlpaWlpaWk8AEdHcdXq4urq6urq6urqFcg/QOrq6urq6urq6urqV2I3R0eOBQUFExMTExMTExMTExMTExMTExMTExMTExMTjtxHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" } }
Et pour encoder/décoder le fichier comment faut-il s'y prendre?
Avec l'URI ça serait peut-être :
@Ocynox Ce n'est pas comme ça que je comprends la documentation. Ça m'a l'air beaucoup plus simple... Vous voyez ?
Et pour encoder/décoder le fichier comment faut-il s'y prendre?
Pour le décodage Base64, c'est CouchDB qui s'en occupe.
Pour l'encodage, c'est assez bien expliqué sur le net. Par exemple :
@Ocynox Ce n'est pas comme ça que je comprends la documentation. Ça m'a l'air beaucoup plus simple... Vous voyez ?
https://docs.couchdb.org/en/2.3.1/api/document/attachments.html#put--db-docid-attname
Vous avez l'identifiant de la ressource à créer/modifier (PUT
), la représentation de cette ressource, et le type de représentation comme métadonnée. C'est le principe même du protocole HTTP... Notez bien que dans cette partie de la documentation, on ne parle pas du tout de JSON...
Alors c'est simplement ? : Méthode : POST URI : /007/fichiersecret.icon Corps: { "content_type": "image/vnd.microsoft.icon" }
@Ocynox Non, il n'y a pas de fichier JSON. C'est du HTTP pur et simple :
MÉTHODE :
PUT
URI :
/007/fichiersecret.ico
ENTÊTES :
Content-Type: image/vnd.microsoft.icon
CORPS :
AAABAAEAICAAAAEACACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAG4C0AAAagAAAG4AAE1WjADdVowAALJIALJPGAAMukgAbKlsABzGSAAMzkgAue8cAADeSACM9kgAwhccADVWkAAAbgQAdg7UAN1akAAAtkwAAL5MAGypcACJvtgAOY6QAFTeTACJXtwAkPpMAAUOTAAx1pAApjsgAABuCAC+SyAAALpQAAy6UABwqXQAMQaYAFj2UAA1NpgAeXrgALY/JAAAdgwAFLpUAMpXJAAAvlQAulskAAyODABwqXgAwmskAADuVAAc7lQAFV7kAJD+VAB98uAANXLkABAQEAAAehAAAH4QAD3PLAAAwlgAaKl8AHStfADGYygAMbrkAATSWADObygAYYqcAIWC6AAANcwAAH4UAHStgAP///wAAPpcAAECXACaHzAAlQZcAFEKXABRPqQAzi8wAEXWoABthuwAGBgYAAB+GAABOlwAAIYYAMpfMAAAxmAAAMpgACTKYAAAnhgAynMwAEGapAAA+mAAxhc0AITKGACyHzQAAQpgANIrNABordAAjXrwAAA91ACKFuwAAIIcAACGHAAAymQAAM5kAADSZADSbzQA1m80AADWZAAI3mQAZLYcAInq8ACREmQAif7wADlKrAAgICAA1k84AJIm8AAAiiAAma70ANZnOAAMmiAAAM5oAADSaAAE0mgAANZoAATWaADaczgAmVpkAN5/OAA1pqwAddr0AE22rABNSrAAVdasAABF3AAAjiQADUZoAL5fPAAAliQACNJsAPWCsAAA1mwA3nM8AAjabADadzwACN5sAOKHPACForAACPZsAC0GbAHyGmQB+iJkAABJ4ABJovwAUXa0AACSKADderQADM5wAJZC+AAM4nAA4n9AAAVqbADig0AAodr8AQEBAACI0igAmR5wAAUycAAATeQA5ldEAJ4q/AAAliwABNp0ABjadAAQ5nQA5odEAAkyvAANCnQAYacEANZjSAAAnjAAnj8AAIGSvABAvjAAKPJ4AOqTSACI2jAAAFXsAACaNAAAnjQAAKI0ADCiNACl+wgAjOI0AKYfCAAAVfAAAFnwACVOfAAJUnwAAKY4AASqOABlksQApksIAAz2gABRQsgAHRKAAE3SxABh1sQArgsMAABd9AAAojwAAKY8AACqPAAArjwAZZ7IAHGeyACl0xAAaKVgARUVFAAlJoQAVXLMAABd+AAAYfgAAGX4AACqQAAArkAA+p9YAIjBZACQ6kAAlhsUAABl/AAAqkQAAK5EAACyRABtrtAAEPqMAJDuRAFJrogAACW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0emUXR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQ3AEdHnhlvb29vb29vb29vb29vb29vb29vb29vb29vb+UAR0dLLGlpaWlpaWlpaWlugRNMaWlpaWlpaWlpaWlpRgBHR3HiLCEhISEhISEhISWYme8iISEhISEhISEhIWlGAEdHcdYUBgYGBgYGBgYGJZiZ7wgGBgYGBgYGBgYGaUYAR0dLwOvq6erq4+Pp6erqGRsK6unj6unj6urj6ulpRgBHRzSt1tXU1dXJydXU1Q0EuMfX1cnV1MnV1cnV1Gk9AEdHG52/v7+/v7+/v7+/l5ItB+O/v7+/v7a/v7+/aS8AR0cOd76tra2tra2tra3duxIBtq2tra2tna2tra1XLwBHR+5FiXd3d3d3d3d3jE+72csxd3d3d3d3d3d3dzsvAEdHwyl3Z1RnZ2dnZ1R3P7tNBBhnZ2dnZ2dUZ2dmLC8AR0fDEUU4ODg4ODg4OJeLgoSEqyo4ODg4ODg4ODgGLwBHR7zoKSkpKSnKHCI2K4BrX12khXpUOSkpKSkpKeIvAEdHvN8RAxECWTWAt3hdzGtspbjnVSCpAwMDAgMC1C8AR0enxejh4OBZoKIQQtGKopB2QrMoVbLh4eHg4eC+IwBHR6eq073gEdmlyHMPCzJK2nga0qQgCNPT09PT050jAEdHXogfts1Q0m5yizZpGEqpxK9YJ05yF7jBvb29iRYAR0fmv2ndPmvYaataspYgQVOc0Wmu54exdbmqqqpnFgBHR6g7aboMVcttzg+HtysglnvMQ1wSs5u1uoiaiFIWAEdHqDtpaZGhzh3ZTqxbsJNqoz5aU+yKfCbCLmREKRYAR0eoO2lpaX1h5MJwJ2lpaWlgPgzP7KNpatjElUQfFgBHR6g7aWmRzTB2JGDLjWlpaXMBuq/CtLBpM4CA8OAJAEdHqDtpM3Aox0l/zh5jjWlqF0NphnmQhmntOtDGqgkAR0eoO2kolE5/aWnagqShaTHEn2kmZWUmaWmPfgbg2wBHR6g7aYM6zn1paSQ63mlpJDVpaWhcXGhpaWlpaeLbAEdHqDtpbY98aWlpaY97Vt2gc2lpaWlpaWlpaWlpaRYAR0eoO2lpV2lpaWlpaWlIduSFamlpaWlpaWlpaWlpPQBHR6g7aVdpaWlpaWlpaVzRHt1paWlpaWlpaWlpaWk8AEdHcdXq4urq6urq6urqFcg/QOrq6urq6urq6urqV2I3R0eOBQUFExMTExMTExMTExMTExMTExMTExMTExMTjtxHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Vérifiez que ça fonctionne en envoyant la requête avec le RESTClient puis en ouvrant l'image avec un navigateur à l'URI indiquée.
Ahhh d'accord je n'ai jamais été introduit à ce genre de requêtes c'est pour ça que ça ne m'était pas intuitif. Je le teste sur RESTClient
J'ai fait d'abord la requête que vous avez noté à http://argos2.test.hypertopic.org/_session pour m'authentifier avec Alice. Je ne pense pas avoir eu d'erreur. J'effectue ensuite le PUT sur http://argos2.test.hypertopic.org/_session/007/fichiersecret.ico J'obtiens Status Code: 404 Not Found. Donc j'imagine que je dois enlever le _session Et si j'essaie sur http://argos2.test.hypertopic.org/007/fichiersecret.ico J'obtiens Status Code: 504 Gateway Timeout
En réessayant j'ai Status Code: 201 Created Et je peux ensuite accéder au fichier cependant j'ai du mal copier l'encodage car le navigateur indique qu'il y a des erreurs dans le fichier
Je suppose qu'il ne reste plus qu'à trouver comment faire une requête HTTP de ce type en Js et la fonctionnalité n'aura plus rien de mystique !
J'effectue ensuite le PUT sur http://argos2.test.hypertopic.org/_session/007/fichiersecret.ico
Non, tout simplement : http://argos2.test.hypertopic.org/007/fichiersecret.ico
.
Les URI d'API sont définies en général de manière absolue et non relative à l'URI courante.
Donc j'imagine que je dois enlever le _session
Désolé, je n'avais pas lu jusqu'au bout.
Et je peux ensuite accéder au fichier cependant j'ai du mal copier l'encodage car le navigateur indique qu'il y a des erreurs dans le fichier
Ah oui, c'est curieux...
Bonjour, il semble qu' il y a des erreurs sur le serveur. Parce que quand je visite le site, il m'indique que (GET http://argos2.test.hypertopic.org/user/vitraux 500 (Internal Server Error)).
Voilà ce que j'ai essayé (en attente du serveur de test pour voir ce que ça donne)
_postResource = async(file) => {
let file_name = file.name, file_type = file.type;
let file_base64 = fs.readFileSync(file).toString('base64');
let services = (await conf).services;
return new Hypertopic(services)
.then(function () {
return fetch(services + '/' + this.state.item.params.item + '/' + file_name,
{
method: 'PUT',
headers: this.headers({
'Content-Type': file_type
}),
credentials: 'include',
body: file_base64
})
.then(function (x) {
if (x.ok) {
return x.json();
}
throw new Error(x.statusText);
})
.then(function (x) {
return Object.assign(file_name, {
_id: x.id,
_rev: x.rev
});
});
})
.catch(err => console.error(err));
//.then((x) => console.log(JSON.stringify(x, null, 2)))
}
Puis
_getResource = async(file_name) => {
let services = (await conf).services;
window.open(services + '/' + this.state.item.params.item + '/' + file_name);
}
Voilà pour que ça soit plus lisible. Pour pouvoir faire un header différent, je n'ai trouvé comme solution que d'accéder moi-même à la db, ou alors il faudrait rajouter une méthode à Hypertopic. J'ai essayé d'adapter le code mais il va sûrement y avoir des erreurs
Voilà pour que ça soit plus lisible.
C'était effectivement ce que j'étais en train de vous écrire. Notez que vous pouvez utiliser la super coloration syntaxique de GitHub : https://help.github.com/en/github/writing-on-github/creating-and-highlighting-code-blocks
Je n'arrive déjà pas à encoder le fichier car j'obtiens "fs.readFileSync is not a function" et je ne trouve pas comment encoder un fichier uploadé et non faire fs.readFileSync sur un path.
Je n'arrive déjà pas à encoder le fichier car j'obtiens "fs.readFileSync is not a function" et je ne trouve pas comment encoder un fichier uploadé et non faire fs.readFileSync sur un path.
Vous le testez à l'intérieur de Porphyry ou dans un code à part ? Je pense que vous n'aurez pas accès au file system à l'intérieur de React (ce qui est plutôt normal si on y réfléchit)...
Personnellement, j'aurais d'abord testé le code pour envoyer le fichier sur CouchDB puis ensuite j'aurais regardé comment avoir accès à ce qui est uploadé à partir du navigateur.
J'essaie donc de faire les deux choses à part, je me demande (même si ça ne me sera peut être pas utile pour ce ticket) tout ce que fait la fonction headers d'Hypertopic au lieu de faire un header simple
je me demande (même si ça ne me sera peut être pas utile pour ce ticket) tout ce que fait la fonction headers d'Hypertopic au lieu de faire un header simple
Comme le code est open-source, c'est facile de répondre à votre question : https://github.com/Hypertopic/lib-node/blob/master/src/index.js#L50-L53
Autrement dit, c'est surtout pour ne pas perdre l'authentification quand on utilise le HTTP Basic (ce qui n'est pas notre cas).
Et également, comme vous le voyez dans le code, pour structurer les identifiants de connexion à la mode "HTTP Basic".
J'étais en train de faire mes tests, et j'ai une erreur "Conflict". Sur RESTClient j'ai Status Code: 409 Conflict. J'ai essayé d'ajouter un If-Match dans les headers pour ajouter la révision mais j'obtiens alors un 400 Bad Request. Comment obtient-on une révision à ajouter au PUT? D'ailleurs, cela devrait signifier que le fichier est uploadé mais en accédant à cette Url j'obtiens un "not found" et non "ce fichier contient des erreurs"
Pour le If-Match
il faut mettre des guillemets autour de la valeur. Par ailleurs, comment avez-vous déterminé sa valeur ?
Notez que le problème de conflit de modification ne se pose qu'à la mise à jour d'une pièce jointe... Ce qui est en dehors du scope de votre ticket.
Je ne sais pas où trouver la révision donc j'ai juste pris l'attribut lastModified. Je ne compte pas gérer les versions, seulement écraser le fichier du même nom en mettant à jour la révision j'imagine.
Le moins coûteux est une requête HEAD sur l'URI de votre pièce jointe. Normalement, La réponse sera dans l'entête ETag.
Mais encore une fois, ce n'est nécessaire normalement que pour modifier la pièce jointe (pas lorsque vous utilisez son URI pour la première fois).
bonjour,quand je essayer d'utiliser fetch pour upload un fichier, il m'indique erreur CORS. Qu'est-ce je dois faire ?
Ici, c'est mon code
@qs Vous êtes à l'intérieur de Porphyry ou dans du code à part ?
dans du code,le fichier (Item.jsx)
Commencez par tester votre procédure dans du code à part (dans Runkit). Comme je l'ai indiqué dans le message que je viens d'envoyer, vous pouvez désormais utiliser .auth('alice', 'whiterabbit')
. Avant ça ne pouvait pas fonctionner.
d'accord. Je vais l'essayer.
@qs4091 Je ne vois plus vos messages de 23:07. Vous les avez supprimés ?
Si vous voulez de l'aide sur du code, merci de le mettre en mode texte (ça me permettra de le tester sans devoir tout recopier à la main).
Si je comprends bien vous testez en parallèle deux manières différentes de le faire ?
@Ocynox avec un fetch
directement sur la pièce jointe,
et @qs4091 avec la bibliothèque Hypertopic sur l'objet qui contient la pièce jointe...
Pourquoi pas... Si ça vous permet de vous partager le travail et de choisir la meilleure solution ensuite...
Notez que pour vous partager le travail, vous auriez pu aussi séparer l'ajout de la pièce jointe et sa consultation (c'est peut-être plus efficace comme partage des tâches). Qu'en pensez-vous ?
@Ocynox Non, il n'y a pas de fichier JSON. C'est du HTTP pur et simple :
MÉTHODE : PUT URI : /007/fichiersecret.ico ENTÊTES : Content-Type: image/vnd.microsoft.icon CORPS : AAABAAEAICAAAAEACACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAG4C0AAAagAAAG4AAE1WjADdVowAALJIALJPGAAMukgAbKlsABzGSAAMzkgAue8cAADeSACM9kgAwhccADVWkAAAbgQAdg7UAN1akAAAtkwAAL5MAGypcACJvtgAOY6QAFTeTACJXtwAkPpMAAUOTAAx1pAApjsgAABuCAC+SyAAALpQAAy6UABwqXQAMQaYAFj2UAA1NpgAeXrgALY/JAAAdgwAFLpUAMpXJAAAvlQAulskAAyODABwqXgAwmskAADuVAAc7lQAFV7kAJD+VAB98uAANXLkABAQEAAAehAAAH4QAD3PLAAAwlgAaKl8AHStfADGYygAMbrkAATSWADObygAYYqcAIWC6AAANcwAAH4UAHStgAP///wAAPpcAAECXACaHzAAlQZcAFEKXABRPqQAzi8wAEXWoABthuwAGBgYAAB+GAABOlwAAIYYAMpfMAAAxmAAAMpgACTKYAAAnhgAynMwAEGapAAA+mAAxhc0AITKGACyHzQAAQpgANIrNABordAAjXrwAAA91ACKFuwAAIIcAACGHAAAymQAAM5kAADSZADSbzQA1m80AADWZAAI3mQAZLYcAInq8ACREmQAif7wADlKrAAgICAA1k84AJIm8AAAiiAAma70ANZnOAAMmiAAAM5oAADSaAAE0mgAANZoAATWaADaczgAmVpkAN5/OAA1pqwAddr0AE22rABNSrAAVdasAABF3AAAjiQADUZoAL5fPAAAliQACNJsAPWCsAAA1mwA3nM8AAjabADadzwACN5sAOKHPACForAACPZsAC0GbAHyGmQB+iJkAABJ4ABJovwAUXa0AACSKADderQADM5wAJZC+AAM4nAA4n9AAAVqbADig0AAodr8AQEBAACI0igAmR5wAAUycAAATeQA5ldEAJ4q/AAAliwABNp0ABjadAAQ5nQA5odEAAkyvAANCnQAYacEANZjSAAAnjAAnj8AAIGSvABAvjAAKPJ4AOqTSACI2jAAAFXsAACaNAAAnjQAAKI0ADCiNACl+wgAjOI0AKYfCAAAVfAAAFnwACVOfAAJUnwAAKY4AASqOABlksQApksIAAz2gABRQsgAHRKAAE3SxABh1sQArgsMAABd9AAAojwAAKY8AACqPAAArjwAZZ7IAHGeyACl0xAAaKVgARUVFAAlJoQAVXLMAABd+AAAYfgAAGX4AACqQAAArkAA+p9YAIjBZACQ6kAAlhsUAABl/AAAqkQAAK5EAACyRABtrtAAEPqMAJDuRAFJrogAACW4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0dHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHR0emUXR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHQ3AEdHnhlvb29vb29vb29vb29vb29vb29vb29vb29vb+UAR0dLLGlpaWlpaWlpaWlugRNMaWlpaWlpaWlpaWlpRgBHR3HiLCEhISEhISEhISWYme8iISEhISEhISEhIWlGAEdHcdYUBgYGBgYGBgYGJZiZ7wgGBgYGBgYGBgYGaUYAR0dLwOvq6erq4+Pp6erqGRsK6unj6unj6urj6ulpRgBHRzSt1tXU1dXJydXU1Q0EuMfX1cnV1MnV1cnV1Gk9AEdHG52/v7+/v7+/v7+/l5ItB+O/v7+/v7a/v7+/aS8AR0cOd76tra2tra2tra3duxIBtq2tra2tna2tra1XLwBHR+5FiXd3d3d3d3d3jE+72csxd3d3d3d3d3d3dzsvAEdHwyl3Z1RnZ2dnZ1R3P7tNBBhnZ2dnZ2dUZ2dmLC8AR0fDEUU4ODg4ODg4OJeLgoSEqyo4ODg4ODg4ODgGLwBHR7zoKSkpKSnKHCI2K4BrX12khXpUOSkpKSkpKeIvAEdHvN8RAxECWTWAt3hdzGtspbjnVSCpAwMDAgMC1C8AR0enxejh4OBZoKIQQtGKopB2QrMoVbLh4eHg4eC+IwBHR6eq073gEdmlyHMPCzJK2nga0qQgCNPT09PT050jAEdHXogfts1Q0m5yizZpGEqpxK9YJ05yF7jBvb29iRYAR0fmv2ndPmvYaataspYgQVOc0Wmu54exdbmqqqpnFgBHR6g7aboMVcttzg+HtysglnvMQ1wSs5u1uoiaiFIWAEdHqDtpaZGhzh3ZTqxbsJNqoz5aU+yKfCbCLmREKRYAR0eoO2lpaX1h5MJwJ2lpaWlgPgzP7KNpatjElUQfFgBHR6g7aWmRzTB2JGDLjWlpaXMBuq/CtLBpM4CA8OAJAEdHqDtpM3Aox0l/zh5jjWlqF0NphnmQhmntOtDGqgkAR0eoO2kolE5/aWnagqShaTHEn2kmZWUmaWmPfgbg2wBHR6g7aYM6zn1paSQ63mlpJDVpaWhcXGhpaWlpaeLbAEdHqDtpbY98aWlpaY97Vt2gc2lpaWlpaWlpaWlpaRYAR0eoO2lpV2lpaWlpaWlIduSFamlpaWlpaWlpaWlpPQBHR6g7aVdpaWlpaWlpaVzRHt1paWlpaWlpaWlpaWk8AEdHcdXq4urq6urq6urqFcg/QOrq6urq6urq6urqV2I3R0eOBQUFExMTExMTExMTExMTExMTExMTExMTExMTjtxHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Vérifiez que ça fonctionne en envoyant la requête avec le RESTClient puis en ouvrant l'image avec un navigateur à l'URI indiquée.
Je l'ai essayé sur RESTClient, mais il m'a dit Unauthorized
Description
What is the valuable outcome that cannot be achieved with current features?
For which stakeholder (people, role, project, domain) is it important?
Which user action should be enabled (or restricted)? For who?
Additional details (solutions you think about, or workarounds you tried)
Deliverables status
Phase 1
Phase 2
Phase 3