Tom's Guide > Forum > Programmation > encoder un fichier binaire en ascii en c++

encoder un fichier binaire en ascii en c++

Forum Programmation : encoder un fichier binaire en ascii en c++

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

salut a tous,
je suis en train de realiser en petit serveur http et j'ai un peu de mal avec l'envoi des fichiers binaires (images,video,son ...)
je sais qu'il faut d'abord passer l fichier du binaire a l'ascii pour pouvoir l'envoyer au navigateur. c'est ce dernier qui decode l'asciipour obtenir le fichier binaire correspondant a l'aide des entetes http que je lui transmettrai.
mais voila ca fait 2 heures que je fouille sur google et je n'ai trouvé qu'une seule librairie (payante en plus!!!) qui permet de rentrer l'adresse du buffer contenant le fichier binaire et il nous retourne l'equivalent ascii qu'on peut balancer au navigateur dans une socket.
ma question est donc de savoir si l'un d'entre vous a un exemple ou une alternative a me proposer pour resoudre cet épineux pb ?
merci de vos suggestions

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

tu l'ouvres en binaire, et tu l'envoie en ascii. Ca marche pas ?

Répondre à bluedylc

je l'ouvre avec fread(fichier, "rb" )
mais ca marche pas.
pour les fichiers binaires, la rfc demande de proceder a la conversion ascii. c'est le navigateur qui retranscrira en binaire en decodant l'ascii vers le binaire, a condition que tu lui mettes dans les entetes http la ligne :
Content-Type: image/jpeg
si c'est du jpeg que tu envoie...

Répondre à theboy

salut,
rapidement, je regarderai de près plus tard si tu n'as pas trouvé, mais fais une recherche avec uuencode ... de vagues souvenirs.

Répondre à ataofeal

Moi, en ocaml (c'est donc assez proche du C++) je lisais le fichier octet par octet (en mode binaire donc, il me semble), et j'envoyais char par char. Ca marchait très bien.

Répondre à bluedylc

Pour envoyer du binaire, il faut coder selon une des 3 méthodes:
- uuencode
- MIME
- multipart
(je suis pas sûr mais je crois que les 3 sont pris en compte par le navigateur (mais pas sûr du tout)

bluedylc, tu n'avais pas une fonction qui transformais ça (implicitement) en un de ces encodage ? (enfin, si c'est implicite, tu peux pas trop savoir :-D )

Répondre à CRicky

Bah, je générais le header HTTP 'à la main', donc je suis sur que c'était pas du multipart ou autres joyeusetés.

Après la fonction de lecture des octets bidoullait peut-etre implicitement. T'as essayé de lire char par char tout simplement ?

Répondre à bluedylc

oui j'ai essayé char par char.
j'ai d'abord essayé avec la fonction
ReadFile(file,contenuFichier,tailleFichier,&nbOctetsLus,NULL);
de winsock2.
mais lorsque je recuperais le nb d'octets envoyés par la fonction send, je ne recuperais que la taille des entetes http + 4.
avec les fonctions standards fopen(url, "rb" ) et fread(contenuFichier,1,tailleFichier,fic), la fonction send envoie bien la taille de l'image + la taille des headers mais rien ne s'affiche dans le navigateur.
au niveau des headers j'ai bien sur choisi image/jpeg et j'ai spécifié la taille du corps du message par la taille de l'image.
ce qu'il me faudra vraiument c'est la fonction qui permet de faire la conversion automatique.
j'ai regardé sur msdn mais c'est un fourre-tout, un vrai labyrinthe.

Répondre à theboy

j'ai trouvé ce site sur l'encodage pour ceux que ca intéresse. (en fr)
http://www.iprelax.fr/mime/
maintenat je fais essayer de comprendre lalgorithme de codage 64bits pour coder mes fichiers binaires.
c'est juste quelques lignes mais ca a l'air tendu.
@+

Répondre à theboy
Tom's Guide > Forum > Programmation > encoder un fichier binaire en ascii en c++
Aller à :

Il y a 2766 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens