Hypertopic / Porphyry

Corpus analyses confrontation
https://hypertopic.org/porphyry
GNU Affero General Public License v3.0
21 stars 165 forks source link

Add a resource to an item (as a file) #142

Closed benel closed 2 years ago

benel commented 6 years ago

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

benel commented 4 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.

  1. "Sur vos propres objets et non sur ceux qui sont nécessaires aux tests" signifie dans la base de tests vous avez ceci : Capture d’écran 2020-06-04 à 15 38 43

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 :

benel commented 4 years ago
  1. "avec le RESTClient" fait référence à cet outil :

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.

benel commented 4 years ago

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...

benel commented 4 years ago

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.

Gaetanherry commented 4 years ago

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?

Yann-Qiu commented 4 years ago

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 ?

Gaetanherry commented 4 years ago

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

benel commented 4 years ago

@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).

benel commented 4 years ago

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...

benel commented 4 years ago

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).

benel commented 4 years ago

en HTTP

Donc sans javascript. Juste en donnant la méthode HTTP, les entêtes et le corps de la requête.

Gaetanherry commented 4 years ago

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"}
}});
Gaetanherry commented 4 years ago

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

benel commented 4 years ago
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 :

Méthode

POST

URI

/

Corps

{
  "_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...

benel commented 4 years ago

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.

benel commented 4 years ago

@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.

Gaetanherry commented 4 years ago

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

Gaetanherry commented 4 years ago

Et pour encoder/décoder le fichier comment faut-il s'y prendre?

benel commented 4 years ago

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 :

https://stackabuse.com/encoding-and-decoding-base64-strings-in-node-js/#encodingbinarydatatobase64strings

benel commented 4 years ago

@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...

Gaetanherry commented 4 years ago

Alors c'est simplement ? : Méthode : POST URI : /007/fichiersecret.icon Corps: { "content_type": "image/vnd.microsoft.icon" }

benel commented 4 years ago

@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.

Gaetanherry commented 4 years ago

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

Gaetanherry commented 4 years ago

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

Gaetanherry commented 4 years ago

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 !

benel commented 4 years ago

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.

benel commented 4 years ago

Donc j'imagine que je dois enlever le _session

Désolé, je n'avais pas lu jusqu'au bout.

benel commented 4 years ago

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...

Yann-Qiu commented 4 years ago

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)).

Gaetanherry commented 4 years ago

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); 
  }
Gaetanherry commented 4 years ago

image 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

benel commented 4 years ago

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

Gaetanherry commented 4 years ago

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.

benel commented 4 years ago

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.

Gaetanherry commented 4 years ago

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

benel commented 4 years ago

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).

benel commented 4 years ago

Et également, comme vous le voyez dans le code, pour structurer les identifiants de connexion à la mode "HTTP Basic".

Gaetanherry commented 4 years ago

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? image 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"

benel commented 4 years ago

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.

Gaetanherry commented 4 years ago

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.

benel commented 4 years ago

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).

Yann-Qiu commented 4 years ago

bonjour,quand je essayer d'utiliser fetch pour upload un fichier, il m'indique erreur CORS. image Qu'est-ce je dois faire ?

Yann-Qiu commented 4 years ago

Ici, c'est mon code image

benel commented 4 years ago

@qs Vous êtes à l'intérieur de Porphyry ou dans du code à part ?

Yann-Qiu commented 4 years ago

dans du code,le fichier (Item.jsx)

benel commented 4 years ago

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.

Yann-Qiu commented 4 years ago

d'accord. Je vais l'essayer.

benel commented 4 years ago

@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).

benel commented 4 years ago

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 ?

yuchen0527 commented 4 years ago

@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